home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / music / fft4wav3.zip / DEUTSCH.EXE / FFT4WAVE.HLP next >
Text File  |  1994-12-01  |  78KB  |  1,634 lines

  1. #38  WAV/VOC/SND/IFF/AU/RAW  8bit laden
  2.  
  3. Das Verzeichnis von FFT4WAVE wird nach SOUND-Dateien durchsucht.
  4. Also suche nach WAV/VOC/SND/IFF/AU/RAW/SAM/MAT Dateien (Maximum 4096).
  5. Aus diesen Dateien müssen Sie eine Datei mit Hilfe des Scrollmenüs
  6. auswählen. Diese wird dann am Bildschirm angezeigt und Sie können sich
  7. mit Hilfe der Maus einen beliebigen Startpunkt innerhalb der Datei wählen.
  8. Folgende Tasten stehen zusätzlich zur Verfügung:
  9.  
  10. Esc:                    Funktion abbrechen.   
  11. Tab, rechte Maustaste:  Umschalten zwischen signed/unsigned Mode. 
  12.       linke Maustaste:  Datei ab Startpunkt laden.
  13.  
  14. FFT4WAVE kennt nur den Header von WAV-Dateien. Aus dem WAV-Header wird die
  15. Information: Samplerate, 8bit_unsigned / 16bit_signed, Stereo/Mono gelesen.
  16. Stereo WAV-Dateien werden als  Real & Imag. Daten  interpretiert,
  17. und MONO Dateien (default) werden als reelle Daten interpretiert.
  18. Es werden nur soviele Abtastwerte gelesen wie in der INI-Datei vereinbart!
  19. VOC/SND/IFF/AU/RAW/SAM/MAT Dateien werden als mono 8bit unsigned interpretiert,
  20. mit der in der INI-Datei vereinbarten Samplerate (11000).
  21.  
  22. #39  WAV/VOC/SND/IFF/AU/RAW 16bit laden
  23.  
  24. Das Verzeichnis von FFT4WAVE wird nach SOUND-Dateien durchsucht.
  25. Also suche nach WAV/VOC/SND/IFF/AU/RAW/SAM/MAT Dateien (Maximum 4096).
  26. Aus diesen Dateien müssen Sie eine Datei mit Hilfe des Scrollmenüs
  27. auswählen. Diese wird dann am Bildschirm angezeigt und Sie können sich
  28. mit Hilfe der Maus einen beliebigen Startpunkt innerhalb der Datei wählen.
  29. Folgende Tasten stehen zusätzlich zur Verfügung:
  30.  
  31. Esc:                    Funktion abbrechen.   
  32. Tab, rechte Maustaste:  Umschalten zwischen signed/unsigned Mode. 
  33.       linke Maustaste:  Datei ab Startpunkt laden.
  34.  
  35. FFT4WAVE kennt nur den Header von WAV-Dateien. Aus dem WAV-Header wird die
  36. Information: Samplerate, 8bit_unsigned / 16bit_signed, Stereo/Mono gelesen.
  37. Stereo WAV-Dateien werden als  Real & Imag. Daten  interpretiert,
  38. und MONO Dateien (default) werden als reelle Daten interpretiert.
  39. Es werden nur soviele Abtastwerte gelesen wie in der INI-Datei vereinbart!
  40. VOC/SND/IFF/AU/RAW/SAM/MAT Dateien werden als mono 16bit signed interpretiert,
  41. mit der in der INI-Datei vereinbarten Samplerate (11000).
  42.  
  43. #11  WAV-Datei Aufnahme mit 11kHz
  44.  
  45. Die Funktionen 1...19 dienen zum Einbinden von externen Programmen!
  46.  
  47. 1.....9  FFT4WAVE beenden ohne die Daten abzuspeichern.
  48. 10...19  alle Daten in "TEMP.FFT" abspeichern und dann FFT4WAVE beenden.
  49.  
  50. FFT4WAVE liefert DOS die Funktionsnummer als Errorlevel zurück.
  51. Der Errorlevel kann in der START.BAT Datei ausgewertet werden und startet
  52. dann das gewünschte externe Programm.
  53.  
  54. Funktion Nr.11 startet ein externes Programm:     RWAVE fft.wav 11000
  55.  
  56. Dieses Programm nimmt die SOUND-Datei "FFT.WAV" auf, mit einer
  57. Samplerate von 11000 1/s, was einer Grenzfrequenz von 5500Hz entspricht.
  58.  
  59. #12  WAV-Datei Aufnahme mit 22kHz
  60.  
  61. Die Funktionen 1...19 dienen zum Einbinden von externen Programmen!
  62.  
  63. 1.....9  FFT4WAVE beenden ohne die Daten abzuspeichern.
  64. 10...19  alle Daten in "TEMP.FFT" abspeichern und dann FFT4WAVE beenden.
  65.  
  66. FFT4WAVE liefert DOS die Funktionsnummer als Errorlevel zurück.
  67. Der Errorlevel kann in der START.BAT Datei ausgewertet werden und startet
  68. dann das gewünschte externe Programm.
  69.  
  70. Funktion Nr.12 startet ein externes Programm:     RWAVE fft.wav 22000
  71.  
  72. Dieses Programm nimmt die SOUND-Datei "FFT.WAV" auf, mit einer
  73. Samplerate von 22000 1/s, was einer Grenzfrequenz von 11000Hz entspricht.
  74.  
  75. #13  WAV-Datei Aufnahme mit 44kHz
  76.  
  77. Die Funktionen 1...19 dienen zum Einbinden von externen Programmen!
  78.  
  79. 1.....9  FFT4WAVE beenden ohne die Daten abzuspeichern.
  80. 10...19  alle Daten in "TEMP.FFT" abspeichern und dann FFT4WAVE beenden.
  81.  
  82. FFT4WAVE liefert DOS die Funktionsnummer als Errorlevel zurück.
  83. Der Errorlevel kann in der START.BAT Datei ausgewertet werden und startet
  84. dann das gewünschte externe Programm.
  85.  
  86. Funktion Nr.13 startet ein externes Programm:     RWAVE fft.wav 44000
  87.  
  88. Dieses Programm nimmt die SOUND-Datei "FFT.WAV" auf, mit einer
  89. Samplerate von 44000 1/s, was einer Grenzfrequenz von 22000Hz entspricht.
  90.  
  91. #8  Formeln...
  92.  
  93. Extern eingebundener Formel-Interpreter / Funktionsgenerator
  94. -------------------------------------------------------------
  95. Geben sie eine Gleichung der Form  'y=5*sin(x)-1' oder 'y=rect(t)+t' ein;
  96. (das y= lassen Sie aber bitte weg!) und Sie erhalten die diskreten Werte...
  97.  
  98. Die Daten liegen in der FFT typischen Darstellung vor, mit der Null am linken
  99. und rechten Rand (in X-Richtung), wenn Xmin als negative Zahl eingegeben wird!
  100. Wenn Sie das stört, benutzen Sie doch einfach die Nullpunktvertauschung_X.
  101.  
  102. Es existieren folgende Variablen und Konstanten:
  103. -------------------------------------------------
  104. t = x           
  105. e = 2.718281828
  106. p = 3.141592654 = π
  107. m = 6.283185307 = 2π
  108. q = 9.869604401 = π²
  109. l = 0.693147181 = ln(2) 
  110. w = 1.414213562 = √2
  111. v = 0.707106781 = 1/√2
  112. d = 1.732050808 = √3
  113.  
  114. Funktionen:
  115. ------------
  116.  
  117.    sin()     cos()     tan()
  118. Arcsin()  Arccos()  Arctan()
  119. Si()      <== Si(x)=sin(x)/x 
  120. ln()      <== Logarithmus zur Basis e
  121. log()     <== Logarithmus zur Basis 10
  122. Wurzel()  <== Quadratwurzel / Squareroot...
  123. abs()     <== absoluter (Vorzeichenloser) Wert
  124. sgn()     <== sgn(<0)=-1   sgn(0)=0   sgn(>0)=1
  125. Sprung()  <== Sprung(>=0)=1        Sprung(<0)=0
  126. clip()    <== clip(<-1)=-1   clip(x)=x   clip(>1)=1
  127. noise(x)  <== Zufallszahl, von -x ... x 
  128. data(x)   <== Zufallszahl, Werte = 0,1,2,3,4...x
  129. rect()    <== rect(-0.5<x<0.5)=1              sonst 0
  130. dreieck() <== dreieck(-1<x<1)=1-abs(x)        sonst 0
  131. ramp()    <== ramp(-1<x<1)=0.5*x+0.5          sonst 0
  132. Hanning() <== Hanning(-1<x<1)=0.5+0.5cos(π*x) sonst 0
  133. diracs()  <== diracs(x=int(x)) = (1)          sonst 0
  134. dirac()   <== dirac( x = 0 )   = (1)          sonst 0
  135. exp()     <== exp(0<x) = e^(-ln(2)*x )        sonst 0
  136. gauss(x)  <==            e^(-ln(2)*x²)
  137.  
  138. Natürlich ist die tatsächliche Programmierung teilweise stark abweichend, um
  139. optimale (also zuverlässige Funktion) zu gewährleisten, gerade die korrekte
  140. Funktion des Diracstoßes/Diracstoßfolge bei Faltungen, war nicht ganz einfach
  141. zu realisieren, aber Ich habe es geschafft !!!
  142.  
  143. Folgende Operatoren gibt es:
  144. ------------------------------
  145.  +   Addition
  146.  -   Subtraktion
  147.  *   Multiplikation
  148.  /   Divison
  149.  ^   Potenzieren, hoch
  150.  #   Faltung  (Ich weiss daß das '*' eigentlich für die Faltung, und nicht für
  151.                die Multiplikation steht, aber IBM wußte das wohl nicht...)
  152.  
  153. Der Faltungsoperator # ist nicht innerhalb von Klammern zulässig!!!
  154. (Es sind aber durchaus mehere Faltungen, '#'s in einer Gleichung zulässig!)
  155. Der Faltungsoperator # bewirkt, daß die Gleichung in mehrere Stücke geteilt
  156. wird, die dann getrennt ausgerechnet werden, und schließlich mittels
  157. FFT-Faltung miteinander gefaltet werden...
  158.  
  159. Ich bin auf die korrekte Funktion der Faltung sehr stolz.
  160.  
  161. Rangfolge der Operatoren:    1.Stufe    ( )           Klammern
  162.                              2.Stufe    + - * / ^     gleichrangig!
  163.                              3.Stufe    #             Faltung
  164.  
  165. Gleichrangige Operatoren werden stur von links nach rechts gerechnet.
  166. Ich empfehle deshalb dringend die Verwendung von Klammern, Beispiel:
  167. e*t-p^2*sin(t)  wird gerechnet wie [[[e*t]-p]^2]*sin(t)
  168. (e*t)-((p^2)*sin(t)) dagegen bewirkt die korrekte mathematische Rangfolge...
  169.  
  170. Negative Zahlen: -z eingeben als (0-z)
  171.  
  172. Mit  'Esc'  wird der Funktions-Generator abgebrochen / abgewürgt !
  173. Mit  'Del'  wird die angezeigte Funktion verworfen (also neue Formel eingeben).
  174. Mit 'Enter' wird die angezeigte Funktion an FFT4WAVE über TEMP.FFT übergeben.
  175.                    TEMP.FFT wird beim Start von FFT4WAVE automatisch geladen.
  176.  
  177. #40  alle Daten (.FFT)  laden
  178.  
  179. Zeigt alle FFT-Dateien des FFT4WAVE Verzeichnisses an.
  180. Aus diesen Dateien müssen Sie eine auswählen, oder mit Esc abbrechen.
  181. diese Datei wird dann geladen; *.FFT ist das eigentliche Datenformat von
  182. FFT4WAVE, es enthält alle Informationen und alle Daten...
  183.  
  184.  
  185. Das *.FFT Datenformat:
  186. ----------------------- 
  187. long    Status
  188. long    AnzahlNormal
  189. long    AnzahlReal
  190. long    AnzahlImag
  191. double  Samplerate
  192. double  real[]        //AnzahlReal double-Werte  {real[] Array} 
  193. double  imag[]        //AnzahlImag double-Werte  {imag[] Array}
  194.  
  195.  
  196. Status:  bit0 =  (Stereo)       reelle / komplexe Daten
  197.          bit1 = (FFTflag)  Zeitbereich / Frequenzbereich
  198.          bit2 =  (Nykill)  transformierte reelle Daten
  199.          Daraus ergeben sich folgende sinnvolle Möglichkeiten:
  200. Status= 0     Reelle Daten im Zeitbereich
  201. Status= 1   Komplexe Daten im Zeitbereich
  202. Status= 3   Komplexe Daten im Frequenzbereich, 0...Samplerate
  203. Status= 7   Komplexe Daten im Frequenzbereich, 0...Samplerate/2
  204.  
  205. AnzahlNormal ist die Anzahl gültiger Abtastwerte (Daten):
  206. Komplexen Daten:  AnzahlNormal = der kleinere Wert von AnzahlReal,AnzahlImag.
  207. Reelle Daten:     AnzahlNormal = AnzahlReal + AnzahlImag;
  208.  
  209. Reelle Daten werden alternierend in real[] und imag[] abgespeichert:
  210. real[] = { 0, 2, 4, 6, 8, 10, 12, 14, ...};
  211. imag[] = { 1, 3, 5, 7, 9, 11, 13, 15, ...};
  212. Die Zahlen entsprechen der Nummer des Reellen Wertes!
  213.  
  214. #41  alle Daten (.FFT)  speichern
  215.  
  216. Zeigt alle FFT-Dateien des FFT4WAVE Verzeichnisses an.
  217. Geben Sie jetzt einen neuen Dateinamen an (.FFT können sie auch weglassen).
  218. Alle Daten und Informationen werden jetzt in dieser FFT-Datei gespeichert!
  219. *.FFT ist das eigentliche Datenformat von FFT4WAVE...
  220.  
  221.  
  222. Das *.FFT Datenformat:
  223. ----------------------- 
  224. long    Status
  225. long    AnzahlNormal
  226. long    AnzahlReal
  227. long    AnzahlImag
  228. double  Samplerate
  229. double  real[]        //AnzahlReal double-Werte  {real[] Array} 
  230. double  imag[]        //AnzahlImag double-Werte  {imag[] Array}
  231.  
  232.  
  233. Status:  bit0 =  (Stereo)       reelle / komplexe Daten
  234.          bit1 = (FFTflag)  Zeitbereich / Frequenzbereich
  235.          bit2 =  (Nykill)  transformierte reelle Daten
  236.          Daraus ergeben sich folgende sinnvolle Möglichkeiten:
  237. Status= 0     Reelle Daten im Zeitbereich
  238. Status= 1   Komplexe Daten im Zeitbereich
  239. Status= 3   Komplexe Daten im Frequenzbereich, 0...Samplerate
  240. Status= 7   Komplexe Daten im Frequenzbereich, 0...Samplerate/2
  241.  
  242. AnzahlNormal ist die Anzahl gültiger Abtastwerte (Daten):
  243. Komplexen Daten:  AnzahlNormal = der kleinere Wert von AnzahlReal,AnzahlImag.
  244. Reelle Daten:     AnzahlNormal = AnzahlReal + AnzahlImag;
  245.  
  246. Reelle Daten werden alternierend in real[] und imag[] abgespeichert:
  247. real[] = { 0, 2, 4, 6, 8, 10, 12, 14, ...};
  248. imag[] = { 1, 3, 5, 7, 9, 11, 13, 15, ...};
  249. Die Zahlen entsprechen der Nummer des Reellen Wertes!
  250.  
  251. #42  Importiere als  Reell
  252.  
  253. Importiert Headerlose Zahlen, die als 'Text' , 'Float' oder 'Double' Format 
  254. vorliegen, als reelle Daten im Zeitbereich.
  255.  
  256. Reelle Daten werden alternierend in real[] und imag[] abgespeichert:
  257. real[] = { 0, 2, 4, 6, 8, 10, 12, 14, ...};
  258. imag[] = { 1, 3, 5, 7, 9, 11, 13, 15, ...};
  259. Die Zahlen entsprechen der Nummer des reellen Wertes!
  260. Dadurch können doppelt soviele reelle Daten im Speicher gehalten werden,
  261. außerdem ist es dadurch sehr einfach, reelle in komplexe Daten umzuwandeln,
  262. man braucht einfach nur das imag[] Array mit Nullen zu überladen...
  263.  
  264. Zuerst müssen Sie sich für ein Format entscheiden (Text, Float, Double).
  265. Daraufhin werden alle Dateien diesen Formats im FFT4WAVE-Directory angezeigt.
  266. Dies ist die letzte Chance um Esc zu benutzen, andernfalls werden die Daten
  267. geladen. Es können natürlich nur soviele Daten gelesen werden, wie im Rechner
  268. Speicherplatz zur Verfügung steht, der Rest wird einfach ignoriert...
  269.  
  270.  
  271. Text - Format:   *.(T)
  272. -----------------------
  273. Alle Dateien mit der Endung .(T) werden als Textformat interpretiert.
  274. Das bedeutet, daß jede Zeile eine Zahl im Textformat enthält!
  275. (hinter der Zahl darf sogar zusätzlich noch ein Kommentar stehen)
  276. Als Zahl werden folgende Zeichen interpretiert:  1234567890. -e
  277. Beispiele:  
  278.  
  279.    24        ;Dies ist ein Kommentar
  280.   3.14159  
  281. -0.75
  282.  1.2345e-12  =  1.2345*10^-12 = 0.0000000000000012345  <--Kommentar
  283. -1.7e6       = -1.7000*10^6   = 1700000.0              <--Kommentar
  284. 0
  285. -234567.7578 = noch ein Kommentar
  286.  
  287.  
  288.  
  289. Float - Format:   *.(F)
  290. ------------------------
  291. Alle Dateien mit der Endung .(F) werden als Floatformat interpretiert,
  292. das sich aus den Floatformat (Gleitkomma) der Sprache C ergibt.
  293. Selbiges entspricht einer internationalen Normung und ist 4 Bytes lang.
  294. Die Float-Zahlen folgen ohne jedes Trennzeichen aufeinander, daraus folgt:
  295. Anzahl Zahlen = Länge der Datei in Bytes / 4
  296.  
  297.  
  298.  
  299. Double - Format:   *.(D)
  300. -------------------------
  301. Alle Dateien mit der Endung .(D) werden als Doubleformat interpretiert,
  302. das sich aus den Doubleformat (Gleitkomma) der Sprache C ergibt.
  303. Selbiges entspricht einer internationalen Normung und ist 8 Bytes lang.
  304. Die Double-Zahlen folgen ohne jedes Trennzeichen aufeinander, daraus folgt:
  305. Anzahl Zahlen = Länge der Datei in Bytes / 8
  306.  
  307. (Dateien mit der Endung .FFT enthalten ebenfalls Zahlen im Double-Format,
  308.  enthalten zusätzlich jedoch einen Header mit zusätzlichen Informationen.)
  309.  
  310. #43  Importiere als  Real
  311.  
  312. Importiert Headerlose Zahlen, die als 'Text' , 'Float' oder 'Double' Format 
  313. vorliegen, als Realteil komplexer Daten im Zeitbereich.
  314.  
  315. Der Imaginärteil komplexer Daten wird dabei überhaupt nicht verändert!
  316.  
  317. Es kommt häufig vor,daß Realteil und Imaginärteil unterschiedliche Längen haben
  318. können. Diese können sogar vollständig in einer *.FFT Datei gespeichert werden.
  319. Es ist natürlich klar, daß für bestimmte Operationen, wie z.b.
  320. Hanning Fenster, FFT, X-Skalierung, Y-Skalierung, Polar -> real & imag,
  321. Nullpunktvertauschung_X, Absoluter Fehler, komplexe Faltung,
  322. die Daten von Realteil und Imaginärteil existent sein müssen!
  323. In diesem Fall wird die kürzere von beiden Längen als gültige Länge für die
  324. auszuführende Operation verwendet. Diese wird auch unter Status-Information
  325. gezeigt. Selbst Visualisierung zeigt nur bis zur gültigen Länge an!
  326. Folgende Operationen korrigieren (kürzen) die überstehende Länge einfach weg:
  327. FFT, X-Skalierung, Y-Skalierung, Absoluter Fehler, und die komplexe Faltung.
  328.  
  329. Der Vorteil der dynamischen Datenlänge:
  330.  
  331. fülle     Realteil mit  800 Werten
  332. fülle Imaginärteil mit 1024 Werten   /gültige Länge=800
  333. fülle Imaginärteil mit  512 Werten   /gültige Länge=512
  334. fülle     Realteil mit 8192 Werten   /gültige Länge=512
  335. fülle Imaginärteil mit 9000 Werten   /gültige Länge=8192
  336.  
  337.  
  338. Zuerst müssen Sie sich für ein Format entscheiden (Text, Float, Double).
  339. Daraufhin werden alle Dateien diesen Formats im FFT4WAVE-Directory angezeigt.
  340. Dies ist die letzte Chance um Esc zu benutzen, andernfalls werden die Daten
  341. geladen. Es können natürlich nur soviele Daten gelesen werden, wie im Rechner
  342. Speicherplatz zur Verfügung steht, der Rest wird einfach ignoriert...
  343.  
  344.  
  345. Text - Format:   *.(T)
  346. -----------------------
  347. Alle Dateien mit der Endung .(T) werden als Textformat interpretiert.
  348. Das bedeutet, daß jede Zeile eine Zahl im Textformat enthält!
  349. (hinter der Zahl darf sogar zusätzlich noch ein Kommentar stehen)
  350. Als Zahl werden folgende Zeichen interpretiert:  1234567890. -e
  351. Beispiele:  
  352.  
  353.    24        ;Dies ist ein Kommentar
  354.   3.14159  
  355. -0.75
  356.  1.2345e-12  =  1.2345*10^-12 = 0.0000000000000012345  <--Kommentar
  357. -1.7e6       = -1.7000*10^6   = 1700000.0              <--Kommentar
  358. 0
  359. -234567.7578 = noch ein Kommentar
  360.  
  361.  
  362.  
  363. Float - Format:   *.(F)
  364. ------------------------
  365. Alle Dateien mit der Endung .(F) werden als Floatformat interpretiert,
  366. das sich aus den Floatformat (Gleitkomma) der Sprache C ergibt.
  367. Selbiges entspricht einer internationalen Normung und ist 4 Bytes lang.
  368. Die Float-Zahlen folgen ohne jedes Trennzeichen aufeinander, daraus folgt:
  369. Anzahl Zahlen = Länge der Datei in Bytes / 4 
  370.  
  371.  
  372.  
  373. Double - Format:   *.(D)
  374. -------------------------
  375. Alle Dateien mit der Endung .(D) werden als Doubleformat interpretiert,
  376. das sich aus den Doubleformat (Gleitkomma) der Sprache C ergibt.
  377. Selbiges entspricht einer internationalen Normung und ist 8 Bytes lang.
  378. Die Double-Zahlen folgen ohne jedes Trennzeichen aufeinander, daraus folgt:
  379. Anzahl Zahlen = Länge der Datei in Bytes / 8 
  380.  
  381. (Dateien mit der Endung .FFT enthalten ebenfalls Zahlen im Double-Format,
  382.  enthalten zusätzlich jedoch einen Header mit zusätzlichen Informationen.)
  383.  
  384. #44  Importiere als  Imag.
  385.  
  386. Importiert Headerlose Zahlen, die als 'Text' , 'Float' oder 'Double' Format 
  387. vorliegen, als Imaginärteil komplexer Daten im Zeitbereich.
  388.  
  389. Der Realteil komplexer Daten wird dabei überhaupt nicht verändert!
  390.  
  391. Es kommt häufig vor,daß Realteil und Imaginärteil unterschiedliche Längen haben
  392. können. Diese können sogar vollständig in einer *.FFT Datei gespeichert werden.
  393. Es ist natürlich klar,daß für bestimmte Operationen, wie z.b.
  394. Hanning Fenster, FFT, X-Skalierung, Y-Skalierung, Polar -> real & imag,  
  395. Nullpunktvertauschung_X, Absoluter Fehler, komplexe Faltung,
  396. die Daten von Realteil und Imaginärteil existent sein müssen!
  397. In diesem Fall wird die kürzere von beiden Längen als gültige Länge für die
  398. auszuführende Operation verwendet. Diese wird auch unter Status-Information 
  399. gezeigt. Selbst Visualisierung zeigt nur bis zur gültigen Länge an!
  400. Folgende Operationen korrigieren (kürzen) die überstehende Länge einfach weg:
  401. FFT, X-Skalierung, Y-Skalierung, Absoluter Fehler, und die komplexe Faltung.
  402.  
  403. Der Vorteil der dynamischen Datenlänge:
  404.  
  405. fülle     Realteil mit  800 Werten
  406. fülle Imaginärteil mit 1024 Werten   /gültige Länge=800
  407. fülle Imaginärteil mit  512 Werten   /gültige Länge=512
  408. fülle     Realteil mit 8192 Werten   /gültige Länge=512
  409. fülle Imaginärteil mit 9000 Werten   /gültige Länge=8192
  410.  
  411. Tip: Es ist sehr sehr einfach reelle im komplexe Daten umzuwandeln,
  412. man braucht einfach nur ZERO.(F) als Imaginärteil zu (über)laden.
  413. Es ist aber auch möglich, die reellen Daten zu exportieren, dann als
  414. Realteil zu importieren und schließlich ZERO.(F) als Imaginärteil zu laden.
  415.  
  416.  
  417. Zuerst müssen Sie sich für ein Format entscheiden (Text, Float, Double).
  418. Daraufhin werden alle Dateien diesen Formats im FFT4WAVE-Directory angezeigt.
  419. Dies ist die letzte Chance um Esc zu benutzen, andernfalls werden die Daten
  420. geladen. Es können natürlich nur soviele Daten gelesen werden, wie im Rechner
  421. Speicherplatz zur Verfügung steht, der Rest wird einfach ignoriert...
  422.  
  423.  
  424. Text - Format:   *.(T)
  425. -----------------------
  426. Alle Dateien mit der Endung .(T) werden als Textformat interpretiert.
  427. Das bedeutet, daß jede Zeile eine Zahl im Textformat enthält!
  428. (hinter der Zahl darf sogar zusätzlich noch ein Kommentar stehen)
  429. Als Zahl werden folgende Zeichen interpretiert:  1234567890. -e
  430. Beispiele:  
  431.  
  432.    24        ;Dies ist ein Kommentar
  433.   3.14159  
  434. -0.75
  435.  1.2345e-12  =  1.2345*10^-12 = 0.0000000000000012345  <--Kommentar
  436. -1.7e6       = -1.7000*10^6   = 1700000.0              <--Kommentar
  437. 0
  438. -234567.7578 = noch ein Kommentar
  439.  
  440.  
  441.  
  442. Float - Format:   *.(F)
  443. ------------------------
  444. Alle Dateien mit der Endung .(F) werden als Floatformat interpretiert,
  445. das sich aus den Floatformat (Gleitkomma) der Sprache C ergibt.
  446. Selbiges entspricht einer internationalen Normung und ist 4 Bytes lang.
  447. Die Float-Zahlen folgen ohne jedes Trennzeichen aufeinander, daraus folgt:
  448. Anzahl Zahlen = Länge der Datei in Bytes / 4 
  449.  
  450.  
  451.  
  452. Double - Format:   *.(D)
  453. -------------------------
  454. Alle Dateien mit der Endung .(D) werden als Doubleformat interpretiert,
  455. das sich aus den Doubleformat (Gleitkomma) der Sprache C ergibt.
  456. Selbiges entspricht einer internationalen Normung und ist 8 Bytes lang.
  457. Die Double-Zahlen folgen ohne jedes Trennzeichen aufeinander, daraus folgt:
  458. Anzahl Zahlen = Länge der Datei in Bytes / 8 
  459.  
  460. (Dateien mit der Endung .FFT enthalten ebenfalls Zahlen im Double-Format,
  461.  enthalten zusätzlich jedoch einen Header mit zusätzlichen Informationen.)
  462.  
  463. #45  Importiere als  Real & Imag.
  464.  
  465. Importiert Headerlose Zahlen, die als 'Text' , 'Float' oder 'Double' Format 
  466. vorliegen, als komplexe Daten (Real & Imag.) im Zeitbereich.
  467. Dazu wird die Anzahl der Zahlen bestimmt, 
  468.  
  469.        0 ... Anzahl/2-1        realen Daten, Realteil
  470. Anzahl/2 ... Anzahl-1      imaginären Daten, Imaginärteil
  471.  
  472. also wird die erste Hälfte als Real und die zweite Hälfte als Imag. eingelesen.
  473.  
  474. Zuerst müssen Sie sich für ein Format entscheiden (Text, Float, Double).
  475. Daraufhin werden alle Dateien diesen Formats im FFT4WAVE-Directory angezeigt.
  476. Dies ist die letzte Chance um Esc zu benutzen, andernfalls werden die Daten
  477. geladen. Wenn nicht genug Speicherplatz zur Verfügung steht, dann stehen im
  478. Imaginärteil unsinnige Daten, der Rechner stürzt jedoch keinesfalls ab!
  479. Das Problem tritt jedoch eigentlich so gut wie nie auf!!!
  480.  
  481.  
  482.  
  483. Text - Format:   *.(T)
  484. -----------------------
  485. Alle Dateien mit der Endung .(T) werden als Textformat interpretiert.
  486. Das bedeutet, daß jede Zeile eine Zahl im Textformat enthält!
  487. (hinter der Zahl darf sogar zusätzlich noch ein Kommentar stehen)
  488. Als Zahl werden folgende Zeichen interpretiert:  1234567890. -e
  489. Beispiele:  
  490.  
  491.    24        ;Dies ist ein Kommentar
  492.   3.14159  
  493. -0.75
  494.  1.2345e-12  =  1.2345*10^-12 = 0.0000000000000012345  <--Kommentar
  495. -1.7e6       = -1.7000*10^6   = 1700000.0              <--Kommentar
  496. 0
  497. -234567.7578 = noch ein Kommentar
  498.  
  499.  
  500.  
  501. Float - Format:   *.(F)
  502. ------------------------
  503. Alle Dateien mit der Endung .(F) werden als Floatformat interpretiert,
  504. das sich aus den Floatformat (Gleitkomma) der Sprache C ergibt.
  505. Selbiges entspricht einer internationalen Normung und ist 4 Bytes lang.
  506. Die Float-Zahlen folgen ohne jedes Trennzeichen aufeinander, daraus folgt:
  507. Anzahl Zahlen = Länge der Datei in Bytes / 4 
  508.  
  509.  
  510.  
  511. Double - Format:   *.(D)
  512. -------------------------
  513. Alle Dateien mit der Endung .(D) werden als Doubleformat interpretiert,
  514. das sich aus den Doubleformat (Gleitkomma) der Sprache C ergibt.
  515. Selbiges entspricht einer internationalen Normung und ist 8 Bytes lang.
  516. Die Double-Zahlen folgen ohne jedes Trennzeichen aufeinander, daraus folgt:
  517. Anzahl Zahlen = Länge der Datei in Bytes / 8 
  518.  
  519. (Dateien mit der Endung .FFT enthalten ebenfalls Zahlen im Double-Format,
  520.  enthalten zusätzlich jedoch einen Header mit zusätzlichen Informationen.)
  521.  
  522. #46  exportiere     Alles
  523.  
  524. Exportiert (speichert) alle vorhandenen Daten (Reell oder Komplex), als  
  525. Headerlose Zahlen hintereinander, im 'Text' , 'Float' oder 'Double' Format.
  526. Es spielt keine Rolle, ob die Daten im Zeitbereich oder im Frequenzbereich
  527. vorliegen, denn die Information Zeitbereich/Frequenzbereich, Samplerate,
  528. Datenlänge, Komplex/Reell wird nicht mit abgespeichert (Headerless).
  529. Es werden nur die rohen Zahlen abgespeichert...
  530.  
  531. Wenn komplexe Daten vorliegen wird zuerst der     Realteil bis zur gültigen 
  532. Datenlänge abgespeichert, und dann  wird  der Imaginärteil bis zur gültigen
  533. Datenlänge abgespeichert.
  534.  
  535. Reelle Daten werden einfach hintereinander abgespeichert.
  536. (also nicht alternierend in Realteil & Imaginärteil wie im *.FFT Format)
  537.  
  538. Zuerst müssen Sie sich für ein Format entscheiden (Text, Float, Double).
  539. Dies ist die letze Chance um ESC zu benutzen um die Funktion abzubrechen!
  540. Daraufhin werden alle Dateien diesen Formats im FFT4WAVE-Directory angezeigt.
  541. Nun müssen sie einen neuen Dateinamen eingeben, die richtige Endung wird 
  542. anhand des gewählten Formats (Text, Float, Double) automatisch angehängt.
  543.  
  544.  
  545.  
  546. Text - Format:   *.(T)
  547. -----------------------
  548. Alle Dateien mit der Endung .(T) werden als Textformat interpretiert.
  549. Das bedeutet, daß jede Zeile eine Zahl im Textformat enthält!
  550. (hinter der Zahl darf sogar zusätzlich noch ein Kommentar stehen)
  551. Als Zahl werden folgende Zeichen interpretiert:  1234567890. -e
  552. Beispiele:  
  553.  
  554.    24        ;Dies ist ein Kommentar
  555.   3.14159  
  556. -0.75
  557.  1.2345e-12  =  1.2345*10^-12 = 0.0000000000000012345  <--Kommentar
  558. -1.7e6       = -1.7000*10^6   = 1700000.0              <--Kommentar
  559. 0
  560. -234567.7578 = noch ein Kommentar
  561.  
  562.  
  563.  
  564. Float - Format:   *.(F)
  565. ------------------------
  566. Alle Dateien mit der Endung .(F) werden als Floatformat interpretiert,
  567. das sich aus den Floatformat (Gleitkomma) der Sprache C ergibt.
  568. Selbiges entspricht einer internationalen Normung und ist 4 Bytes lang.
  569. Die Float-Zahlen folgen ohne jedes Trennzeichen aufeinander, daraus folgt:
  570. Anzahl Zahlen = Länge der Datei in Bytes / 4 
  571.  
  572.  
  573.  
  574. Double - Format:   *.(D)
  575. -------------------------
  576. Alle Dateien mit der Endung .(D) werden als Doubleformat interpretiert,
  577. das sich aus den Doubleformat (Gleitkomma) der Sprache C ergibt.
  578. Selbiges entspricht einer internationalen Normung und ist 8 Bytes lang.
  579. Die Double-Zahlen folgen ohne jedes Trennzeichen aufeinander, daraus folgt:
  580. Anzahl Zahlen = Länge der Datei in Bytes / 8 
  581.  
  582. (Dateien mit der Endung .FFT enthalten ebenfalls Zahlen im Double-Format,
  583.  enthalten zusätzlich jedoch einen Header mit zusätzlichen Informationen.)
  584.  
  585.  
  586. #47  exportiere nur Real
  587.  
  588. Exportiert (speichert) nur den Realteil von komplexen Daten als
  589. Headerlose Zahlen hintereinander, im 'Text' , 'Float' oder 'Double' Format.
  590. Es spielt keine Rolle, ob die Daten im Zeitbereich oder im Frequenzbereich
  591. vorliegen, denn die Information Zeitbereich/Frequenzbereich, Samplerate,
  592. Datenlänge, Komplex/Reell wird nicht mit abgespeichert (Headerless).
  593. Es werden nur die rohen Zahlen abgespeichert...
  594.  
  595. Sollten unsinnigerweise reelle Daten vorliegen, 
  596. dann wird zwar nach dem Dateinamen gefragt, es wird aber nichts
  597. in der Datei abgespeichert, sondern nur eine leere Datei erzeugt!
  598.  
  599. Zuerst müssen Sie sich für ein Format entscheiden (Text, Float, Double).
  600. Dies ist die letze Chance um ESC zu benutzen um die Funktion abzubrechen!
  601. Daraufhin werden alle Dateien diesen Formats im FFT4WAVE-Directory angezeigt.
  602. Nun müssen sie einen neuen Dateinamen eingeben, die richtige Endung wird 
  603. anhand des gewählten Formats (Text, Float, Double) automatisch angehängt.
  604.  
  605.  
  606.  
  607. Text - Format:   *.(T)
  608. -----------------------
  609. Alle Dateien mit der Endung .(T) werden als Textformat interpretiert.
  610. Das bedeutet, daß jede Zeile eine Zahl im Textformat enthält!
  611. (hinter der Zahl darf sogar zusätzlich noch ein Kommentar stehen)
  612. Als Zahl werden folgende Zeichen interpretiert:  1234567890. -e
  613. Beispiele:
  614.  
  615.    24        ;Dies ist ein Kommentar
  616.   3.14159  
  617. -0.75
  618.  1.2345e-12  =  1.2345*10^-12 = 0.0000000000000012345  <--Kommentar
  619. -1.7e6       = -1.7000*10^6   = 1700000.0              <--Kommentar
  620. 0
  621. -234567.7578 = noch ein Kommentar
  622.  
  623.  
  624.  
  625. Float - Format:   *.(F)
  626. ------------------------
  627. Alle Dateien mit der Endung .(F) werden als Floatformat interpretiert,
  628. das sich aus den Floatformat (Gleitkomma) der Sprache C ergibt.
  629. Selbiges entspricht einer internationalen Normung und ist 4 Bytes lang.
  630. Die Float-Zahlen folgen ohne jedes Trennzeichen aufeinander, daraus folgt:
  631. Anzahl Zahlen = Länge der Datei in Bytes / 4 
  632.  
  633.  
  634.  
  635. Double - Format:   *.(D)
  636. -------------------------
  637. Alle Dateien mit der Endung .(D) werden als Doubleformat interpretiert,
  638. das sich aus den Doubleformat (Gleitkomma) der Sprache C ergibt.
  639. Selbiges entspricht einer internationalen Normung und ist 8 Bytes lang.
  640. Die Double-Zahlen folgen ohne jedes Trennzeichen aufeinander, daraus folgt:
  641. Anzahl Zahlen = Länge der Datei in Bytes / 8 
  642.  
  643. (Dateien mit der Endung .FFT enthalten ebenfalls Zahlen im Double-Format,
  644.  enthalten zusätzlich jedoch einen Header mit zusätzlichen Informationen.)
  645.  
  646.  
  647. #48  exportiere nur Imaginär
  648.  
  649. Exportiert (speichert) nur den Imaginärteil von komplexen Daten als
  650. Headerlose Zahlen hintereinander, im 'Text' , 'Float' oder 'Double' Format.
  651. Es spielt keine Rolle, ob die Daten im Zeitbereich oder im Frequenzbereich
  652. vorliegen, denn die Information Zeitbereich/Frequenzbereich, Samplerate,
  653. Datenlänge, Komplex/Reell wird nicht mit abgespeichert (Headerless).
  654. Es werden nur die rohen Zahlen abgespeichert...
  655.  
  656. Sollten unsinnigerweise reelle Daten vorliegen, 
  657. dann wird zwar nach dem Dateinamen gefragt, es wird aber nichts
  658. in der Datei abgespeichert, sondern nur eine leere Datei erzeugt!
  659.  
  660. Zuerst müssen Sie sich für ein Format entscheiden (Text, Float, Double).
  661. Dies ist die letze Chance um ESC zu benutzen um die Funktion abzubrechen!
  662. Daraufhin werden alle Dateien diesen Formats im FFT4WAVE-Directory angezeigt.
  663. Nun müssen sie einen neuen Dateinamen eingeben, die richtige Endung wird
  664. anhand des gewählten Formats (Text, Float, Double) automatisch angehängt.
  665.  
  666.  
  667.  
  668. Text - Format:   *.(T)
  669. -----------------------
  670. Alle Dateien mit der Endung .(T) werden als Textformat interpretiert.
  671. Das bedeutet, daß jede Zeile eine Zahl im Textformat enthält!
  672. (hinter der Zahl darf sogar zusätzlich noch ein Kommentar stehen)
  673. Als Zahl werden folgende Zeichen interpretiert:  1234567890. -e
  674. Beispiele:  
  675.  
  676.    24        ;Dies ist ein Kommentar
  677.   3.14159  
  678. -0.75
  679.  1.2345e-12  =  1.2345*10^-12 = 0.0000000000000012345  <--Kommentar
  680. -1.7e6       = -1.7000*10^6   = 1700000.0              <--Kommentar
  681. 0
  682. -234567.7578 = noch ein Kommentar
  683.  
  684.  
  685.  
  686. Float - Format:   *.(F)
  687. ------------------------
  688. Alle Dateien mit der Endung .(F) werden als Floatformat interpretiert,
  689. das sich aus den Floatformat (Gleitkomma) der Sprache C ergibt.
  690. Selbiges entspricht einer internationalen Normung und ist 4 Bytes lang.
  691. Die Float-Zahlen folgen ohne jedes Trennzeichen aufeinander, daraus folgt:
  692. Anzahl Zahlen = Länge der Datei in Bytes / 4
  693.  
  694.  
  695.  
  696. Double - Format:   *.(D)
  697. -------------------------
  698. Alle Dateien mit der Endung .(D) werden als Doubleformat interpretiert,
  699. das sich aus den Doubleformat (Gleitkomma) der Sprache C ergibt.
  700. Selbiges entspricht einer internationalen Normung und ist 8 Bytes lang.
  701. Die Double-Zahlen folgen ohne jedes Trennzeichen aufeinander, daraus folgt:
  702. Anzahl Zahlen = Länge der Datei in Bytes / 8 
  703.  
  704. (Dateien mit der Endung .FFT enthalten ebenfalls Zahlen im Double-Format,
  705.  enthalten zusätzlich jedoch einen Header mit zusätzlichen Informationen.)
  706.  
  707.  
  708. #37  Hilfe (Wichtig)
  709. Benutzen Sie bitte die Maus, um sich den ganzen Text anzusehen (scrolling).
  710.  
  711. Das Programm läßt sich fast vollständig mit der Maus bedienen.
  712. Die linke Maus-Taste startet meistens ein Funktion,
  713. und die Rechte Maus-Taste hat im Menü die Funktion,
  714. die kontextsensitive Hilfe abzurufen, genau so wie die 'F1' Taste.
  715.  
  716. Die 'Esc' Taste bricht Funktionen ab (inclusive UNDO).
  717. Praktisch alle Funktionen des Menus können bis zum letzten Moment mit der 'Esc'
  718. Taste abgebrochen werden, ohne daß sich die Daten verändern!
  719.  
  720. Ich empfehle dringend, daß Durchlesen der kontextsensitiven Hilfen.
  721. Andernfalls dürften Sie wirklich Schwierigkeiten haben,
  722. das Programm effektiv und sinnvoll zu nutzen...
  723.  
  724. START!.BAT   --->  startet FFT4WAVE
  725. FARBEN.EXE   --->  zeigt all 16 VGA Farben...
  726. FORMEL.EXE   --->  externer Funktionsgenerator von FFT4WAVE
  727. FILTERS.EXE  --->  erzeugt langsam 4MB Beispiele und Filter!
  728. RWAVE.EXE    --->  Aufnahme von TEMP.WAV mit Soundblaster_8bit, (DMA=1, 220h)
  729. RWAVE kann durch WAV-Aufnahmeprogramme für GUS/PAS/SB16/AWE32 ersetzt werden,
  730. dazu braucht man lediglich START!.BAT zu ändern.
  731.  
  732.  
  733. FFT4WAVE läuft unter DOS, PTS_DOS, Novell_DOS, Windows, OS/2, Chicago...
  734. Es benötigt einen 286 Prozessor (Coprozessor kann auch emuliert werden),
  735. 500k bis 640k RAM, eine Maus, und einen Diskcache mit mindestens 512k RAM !!!
  736. Folgende 16_Farben Grafikmodi werden über VESA-Treiber unterstützt:
  737. 640x480,  800x600,  1024x768.
  738.  
  739.  
  740. Das Programm arbeitet Puffer orientiert, vergleichbar mit VGA-COPY.
  741. Das bedeutet, daß die Gesamtheit der Daten den Puffer darstellt.
  742. Jede Funktion macht irgend etwas mit den Daten im Puffer, der aus dem
  743. real[] Array (Realteil) und dem imag[] Array (Imaginärteil) besteht.
  744. (Reelle Daten werden alternierend in real[] und imag[] abgelegt.)
  745. Der Puffer, (also die Daten) können verschiedene Zustände annehmen,
  746. z.b. Zeitbereich, Frequenzbereich, Reell, Komplex, ...
  747. Durch die Samplerate ist es möglich, die Daten korrekt skaliert (in X-Richtung)
  748. mit Hilfe der Visualisierung darzustellen. Es ist sogar möglich, in die
  749. Daten hinein zu zoomen, um interessante Details besser betrachten zu können.
  750.  
  751. Außerdem besteht die Möglichkeit, den Grafikbildschirm in eine schwarzweiße
  752. Windows 3.0 Bitmap-Datei zu schreiben (funktioniert auch mit Windows 3.1).
  753. Dazu müssen sie nur auf die 'F9' oder 'F10' Taste drücken.
  754. Diese Bitmaps werden als  38k...98k  große BILD_???.BMP Datei gespeichert,
  755. ??? ist eine durchlaufende Nummer von 001 bis 999.
  756.  
  757. Die FFT4WAVE.INI Datei ist sehr wichtig und kann mit jedem Texteditor (ASCII)
  758. ediert werden, sie enthält die Farbpalette, SETUP Informationen, und die
  759. Menü-Struktur. Es ist also sogar möglich, den Menütext zu ändern,
  760. ohne das Programm neu compilieren zu müssen!
  761. (Die kontextsensitive Hilfe Datei 'FFT4WAVE.HLP' hat dieselbe 'Menü-Struktur';
  762.  allerdings etwas einfacher, also ohne Spaltenüberschriften.)
  763. -------------------------------------------------------------------------------
  764. Die FFT4WAVE.INI Datei beginnt mit 20 Farben,in 20 aufeinanderfolgenden Zeilen,
  765. gefolgt von Kommentartexten. Die letzten drei 'Farben' , sind eigentlich keine
  766. Farben, sondern erfüllen andere Funktionen:
  767.  
  768. 'Farbe 17' legt fest wieviele Abtastwerte aus Sounddateien gelesen werden,
  769. 'Farbe 18' bestimmt dabei die Samplerate für unbekannte Sounddatei Formate.
  770. 'Farbe 19' bestimmt ob erweiterte Hilfen im Grafikmodus angezeigt werden
  771.            müssen (1) (2), oder nicht (0). Die Modi (2) und (0) verwenden
  772.            überigens meinen Schreibschriftzeichensatz...
  773.  
  774. Die darauf folgende Zeile enthält dann den Grafikmodus:
  775. 1 = 640x480,   2 = 800x600,   3 = 1024x768.
  776. Voreingestellt ist 640x480 in 16 Farben, ändern Sie den Grafikmodus nur,
  777. wenn ihre Grafikkarte und ihr Monitor diese SVGA-Modi auch unterstützen,
  778. eventuell hilft ihnen die Verwendung eines VESA-Treibers weiter...
  779.  
  780. Die darauf folgenden Zeilen enthalten nun die Menü-Struktur:
  781. Es stehen maximal 9 Spalten mal 24 Zeilen zur Verfügung, FFT4WAVE
  782. erkennt freundlichweise selbst, wieviel Spalten und Zeilen vorliegen.
  783. Sie müssen nur darauf achten, daß Sie nicht mehr als 9 Spalten und
  784. auch nicht mehr als 24 Zeilen pro Spalte eingeben.
  785. Die einzelnen Spalten dürfen unterschiedlich viele Zeilen enthalten.
  786. FFT4WAVE's voreingestellte Menü-Struktur nutzt bisher erst 2 Spalten.
  787. Jede neue Spalte beginnt mit einer Spaltenüberschrift,
  788. darauf folgen dann die Zeilen. Um Spaltenüberschriften und Zeilen der Spalte
  789. unterscheiden zu können, beginnen die Zeilen mit einem vorangestellten '#'.
  790.  
  791. Beispiel:     ┌──────────────────────────────────────┐
  792.               │Dies ist eine Spaltenüberschrift      │
  793.               │#FunktionsNummer  Funktionsname       │
  794.               │#34               Das ist eine Zeile  │
  795.               │#9                schnell beenden!    │
  796.               │#19               beenden!            │
  797.               │Und jetzt kommt die nächste Spalte... │
  798.               │#11               Aufnahme 11kHz      │
  799.               │#8                Formel eingeben     │
  800.               └──────────────────────────────────────┘
  801.  
  802. Der Funktionsname wird im Menü angezeigt, die FunktionsNummer bestimmt jedoch
  803. welche Funktion tatsächlich ausgeführt wird!
  804.  
  805. Der Sinn der Menü-Struktur ist, daß man lediglich einen Texteditor benötigt,
  806. um das Programm an eine beliebige Fremdsprache anzupassen, außerdem kann man
  807. unerwünschte Funktionen sogar abschalten...
  808.  
  809. Ich würde mich sehr freuen,
  810. wenn User mit Fremdsprachenkenntnissen, Versionen von FFT4WAVE,
  811. für entsprechende Fremdsprachen veröffentlichen würden,
  812. denn ich selbst habe schon mit Englisch so meine Probleme...
  813. Sie dürfen FFT4WAVE kommerziell nutzen, aber nicht kommerziell vermarkten,
  814. wer also mein Programm für mehr als 20,-DM verkauft, der macht sich strafbar!
  815. Dieses Preislimit gilt jedoch nicht für CD-ROM Programmsammelungen...
  816. Ich habe nichts dagegen, wenn Sie eine verbesserte Version meines Programms
  817. veröffentlichen, der Hinweis auf mich als Autor muß jedoch erhalten bleiben,
  818. Sie können sich lediglich als Zweit-Autor dazu eintragen!
  819.  
  820. Lars Otte  (DrCaos)
  821. #9   schnell Beenden!
  822. Beendet FFT4WAVE ohne die Daten zu speichern!
  823. #19  Exit/Beenden! 
  824. Speichert alle Daten in "TEMP.FFT" und beendet dann FFT4WAVE.
  825. (Wenn FFT4WAVE gestartet wird, dann wird automatisch "TEMP.FFT" geladen!)
  826. #21  Eingabe mit Filtertyp Digital
  827.  
  828. Eingabe des Signals mit Hilfe der Maus.
  829. (Mit der Maus kann man Linien ziehen und Punkte setzen!)
  830. Fehlende Punkte werden mit einem digitalen Interpolations-Filter errechnet,
  831. dieser Filter wiederholt einfach den letzten gültigen Wert, wenn Punkte fehlen.
  832. Er eignet sich hervoragend zur Erstellung digitaler Signale.
  833.  
  834. Nach dem Start der Eingabe stehen folgende Tasten zur Verfügung:
  835. ----------------------------------------------------------------
  836. Esc               Eingabe abbrechen
  837. Del               Bildschirm löschen, Gitter/DIV zeichnen, und wieder Eingabe
  838. Enter             eingebene Stützstellen & Linien akzeptieren, fortsetzen
  839. rechte Maustaste  eingebene Stützstellen & Linien akzeptieren, fortsetzen 
  840. linke  Maustaste  setzt Stützpunkte, Linie = Taste drücken und Maus bewegen
  841. F9                Bildschirminhalt in BILD_???.BMP schreiben, (zum Drucken)
  842. F10               wie F9, jedoch Farbe[2] gestrichelt darstellen
  843. R                 zeigt den     Realteil maximiert in Farbe[3] am Bildschirm
  844. I                 zeigt den Imaginärteil maximiert in Farbe[3] am Bildschirm
  845. B                 zeigt den Real-und Imaginärteil maximiert in Farbe[3]
  846.  
  847. Nachdem nun die Stützstellen eingeben wurden, und mit 'Enter' bestätigt wurden,
  848. werden die fehlenden Stützstellen mit dem Interpolations-Filter interpoliert.
  849. Dann wird das Ergebnis der Interpolation gezeigt, und man kann mittels F9 / F10
  850. das Ergebnis der Interpolation als Windows 3.0 BMP-Datei abspeichern.
  851. (Die BILD_???.BMP Dateien werden von 001 bis 999 durchnummeriert.)
  852.  
  853. Nun stehen folgende Tasten zur Verfügung:
  854. -----------------------------------------
  855. Esc                 Eingabe  abbrechen
  856. 1                   RC-Glättungsfilter Stärke 1
  857. 2                   RC-Glättungsfilter Stärke 2
  858. 3                   RC-Glättungsfilter Stärke 3
  859. 4                   RC-Glättungsfilter Stärke 4
  860. 5                   RC-Glättungsfilter Stärke 5
  861. 6                   RC-Glättungsfilter Stärke 6 
  862. 7                   Symetrischer-Glättungsfilter Stärke 1
  863. 8                   Symetrischer-Glättungsfilter Stärke 2
  864. 9                   Symetrischer-Glättungsfilter Stärke 3
  865. 0                   Symetrischer-Glättungsfilter Stärke 4
  866. andere Tasten       Gleichanteil = 0, fortsetzen...
  867. linke  Maustaste    Gleichanteil = 0, fortsetzen...
  868. rechte Maustaste    Eingabe des Nullpegels und dann fortsetzen...
  869.  
  870. Eingabe des Nullpegels (+ Drehung):
  871. Der Nullpegel wird durch eine Linie zwischen zwei Punkten dargestellt,
  872. haben beide Punkte eine unterschiedliche Höhe, erfolgt zusätzlich eine Drehung.
  873. Die Eingabe des  ersten Punktes erfolgt durch drücken der rechten Maustaste,
  874. die Eingabe des zweiten Punktes erfolgt durch drücken einer beliebigen Taste.
  875.  
  876.  
  877. Die Filter sind 1.Ordnung,aber durch mehrmaliges filtern entstehen auch Filter
  878. beliebiger Ordnung. Je größer die Stärke des Glättungsfilters, desto kleiner
  879. ist die Grenzfrequenz des äquivalenten Tiefpasses.
  880. Mit jedem Filtern erhöht sich auch die Spline-Ordnung des Signals...
  881.  
  882. RC-Filter:
  883. ----------
  884. Es wird eine Mittelung über eine durch die Stärke bestimmte Breite ausgeführt,
  885. außerdem liegt eine Rückkoppelung vor, die dem Bildungsgesetz der Zahl e
  886. nicht unähnlich ist, wenn Sprünge im Signal vorliegen...
  887. Es dürfte infolge dessen nicht wundern, daß Rechteckimpulsen die exp()-Funktion
  888. aufgeprägt wird, genauso wie bei einem RC-Tiefpass 1.Ordnung.
  889. Infolge dessen gehe ich davon aus, daß dieses Filter sich auch so ähnlich wie
  890. ein RC-Tiefpass 1.Ordnung verhält...
  891.  
  892. Symetrischer Filter:
  893. --------------------
  894. Es wird eine Vorwärts-Mittelung des Signals, mit einer durch die Stärke 
  895. bestimmten Breite ausgeführt, ohne Rückkoppelung! 
  896. Die Vorwärts-Mittelung hat den Nachteil einer Verschiebung in X-Richtung,
  897. um zu verhindern, daß unser Signal bei mehreren Filterungen vom Bildschirm
  898. wandert, wird abwechselnd nach links und nach rechts gemittelt.
  899. Aufgrund der Ähnlichkeit von Integration und Mittelung über eine begrenzte
  900. Breite, kann davon ausgegangen werden,daß dieser Filter ein entfernter
  901. Verwandter des Integrators ist(der Frequenzverlauf entspricht der Si-Funktion).
  902. Rechteck und andere Signale, werden im Gegensatz zum RC-Filter symetrisch
  903. verrundet, daher der Name 'Symetrischer Glättungsfilter'.
  904.  
  905.  
  906. Nachdem wir nun gefiltert haben (oder auch nicht),
  907. den Nullpegel festgelegt haben  (b.z.w. Gleichanteil = 0),
  908. möchte das Programm gerne wissen wo, und wie es denn nun das Signal 
  909. abzulegen hat, dies ist überigens die letzte Chance, um mit Esc abzubrechen!
  910.  
  911. Das Signal kann als reelle Daten im Speicher abgelegt werden,
  912. oder als Realteil / Imaginärteil komplexer Daten.
  913.  
  914. Wollen wir Polare Daten eingeben,
  915. speichern wir den Betrag als Realteil, und die Phase als Imaginärteil,
  916. danach müssen wir noch von Polar nach Real & Imag. umrechnen...
  917.  
  918. #22  Eingabe mit Filtertyp Linear
  919.  
  920. Eingabe des Signals mit Hilfe der Maus.
  921. (Mit der linken Maustaste kann man Linien ziehen und Punkte setzen!)
  922. Fehlende Punkte werden mit einem linearer Interpolations-Filter errechnet,
  923. wenn Punkte fehlen, werden einfach die existierenden Punkte durch Linien
  924. miteinander verbunden. Aufgrund der hohen Geschwindigkeit wird diese
  925. Interpolationsmethode gerne in Echtzeitanwendungen verwendet.
  926.  
  927. Nach dem Start der Eingabe stehen folgende Tasten zur Verfügung:
  928. ----------------------------------------------------------------
  929. Esc               Eingabe abbrechen
  930. Del               Bildschirm löschen, Gitter/DIV zeichnen, und wieder Eingabe
  931. Enter             eingebene Stützstellen & Linien akzeptieren, fortsetzen
  932. rechte Maustaste  eingebene Stützstellen & Linien akzeptieren, fortsetzen 
  933. linke  Maustaste  setzt Stützpunkte, Linie = Taste drücken und Maus bewegen
  934. F9                Bildschirminhalt in BILD_???.BMP schreiben, (zum Drucken)
  935. F10               wie F9, jedoch Farbe[2] gestrichelt darstellen
  936. R                 zeigt den     Realteil maximiert in Farbe[3] am Bildschirm
  937. I                 zeigt den Imaginärteil maximiert in Farbe[3] am Bildschirm
  938. B                 zeigt den Real-und Imaginärteil maximiert in Farbe[3]
  939.  
  940. Nachdem nun die Stützstellen eingeben wurden, und mit 'Enter' bestätigt wurden,
  941. werden die fehlenden Stützstellen mit dem Interpolations-Filter interpoliert.
  942. Dann wird das Ergebnis der Interpolation gezeigt, und man kann mittels F9 / F10
  943. das Ergebnis der Interpolation als Windows 3.0 BMP-Datei abspeichern.
  944. (Die BILD_???.BMP Dateien werden von 001 bis 999 durchnummeriert.)
  945.  
  946. Nun stehen folgende Tasten zur Verfügung:
  947. -----------------------------------------
  948. Esc                 Eingabe  abbrechen
  949. 1                   RC-Glättungsfilter Stärke 1
  950. 2                   RC-Glättungsfilter Stärke 2
  951. 3                   RC-Glättungsfilter Stärke 3
  952. 4                   RC-Glättungsfilter Stärke 4
  953. 5                   RC-Glättungsfilter Stärke 5
  954. 6                   RC-Glättungsfilter Stärke 6 
  955. 7                   Symetrischer-Glättungsfilter Stärke 1
  956. 8                   Symetrischer-Glättungsfilter Stärke 2
  957. 9                   Symetrischer-Glättungsfilter Stärke 3
  958. 0                   Symetrischer-Glättungsfilter Stärke 4
  959. andere Tasten       Gleichanteil = 0, fortsetzen...
  960. linke  Maustaste    Gleichanteil = 0, fortsetzen...
  961. rechte Maustaste    Eingabe des Nullpegels und dann fortsetzen...
  962.  
  963. Eingabe des Nullpegels (+ Drehung):
  964. Der Nullpegel wird durch eine Linie zwischen zwei Punkten dargestellt,
  965. haben beide Punkte eine unterschiedliche Höhe, erfolgt zusätzlich eine Drehung.
  966. Die Eingabe des  ersten Punktes erfolgt durch drücken der rechten Maustaste,
  967. die Eingabe des zweiten Punktes erfolgt durch drücken einer beliebigen Taste.
  968.  
  969.  
  970. Die Filter sind 1.Ordnung,aber durch mehrmaliges filtern entstehen auch Filter
  971. beliebiger Ordnung. Je größer die Stärke des Glättungsfilters, desto kleiner 
  972. ist die Grenzfrequenz des äquivalenten Tiefpasses.
  973. Mit jedem Filtern erhöht sich auch die Spline-Ordnung des Signals...
  974.  
  975. RC-Filter:
  976. ----------
  977. Es wird eine Mittelung über eine durch die Stärke bestimmte Breite ausgeführt,
  978. außerdem liegt eine Rückkoppelung vor, die dem Bildungsgesetz der Zahl e
  979. nicht unähnlich ist, wenn Sprünge im Signal vorliegen...
  980. Es dürfte infolge dessen nicht wundern, daß Rechteckimpulsen die exp()-Funktion
  981. aufgeprägt wird, genauso wie bei einem RC-Tiefpass 1.Ordnung.
  982. Infolge dessen gehe ich davon aus, daß dieses Filter sich auch so ähnlich wie
  983. ein RC-Tiefpass 1.Ordnung verhält...
  984.  
  985. Symetrischer Filter:
  986. --------------------
  987. Es wird eine Vorwärts-Mittelung des Signals, mit einer durch die Stärke 
  988. bestimmten Breite ausgeführt, ohne Rückkoppelung! 
  989. Die Vorwärts-Mittelung hat den Nachteil einer Verschiebung in X-Richtung,
  990. um zu verhindern, daß unser Signal bei mehreren Filterungen vom Bildschirm
  991. wandert, wird abwechselnd nach links und nach rechts gemittelt.
  992. Aufgrund der Ähnlichkeit von Integration und Mittelung über eine begrenzte
  993. Breite, kann davon ausgegangen werden, daß dieser Filter ein entfernter
  994. Verwandter des Integrators ist(der Frequenzverlauf entspricht der Si-Funktion).     
  995. Rechteck und andere Signale, werden im Gegensatz zum RC-Filter symetrisch
  996. verrundet, daher der Name 'Symetrischer Glättungsfilter'.
  997.  
  998.  
  999. Nachdem wir nun gefiltert haben (oder auch nicht),
  1000. den Nullpegel festgelegt haben  (b.z.w. Gleichanteil = 0),
  1001. möchte das Programm gerne wissen wo, und wie es denn nun das Signal 
  1002. abzulegen hat, dies ist überigens die letzte Chance, um mit Esc abzubrechen!
  1003.  
  1004. Das Signal kann als reelle Daten im Speicher abgelegt werden,
  1005. oder als Realteil / Imaginärteil komplexer Daten.
  1006.  
  1007. Wollen wir Polare Daten eingeben, 
  1008. speichern wir den Betrag als Realteil, und die Phase als Imaginärteil,
  1009. danach müssen wir noch von Polar nach Real & Imag. umrechnen...
  1010.  
  1011. #23  Eingabe mit Filtertyp SIN-Treppe
  1012.  
  1013. Eingabe des Signals mit Hilfe der Maus.
  1014. (Mit der Maus kann man Linien ziehen und Punkte setzen!)
  1015. Fehlende Punkte werden mit einem COS-Halbbogen Interpolations-Filter errechnet,
  1016. wenn Punkte fehlen, werden die existierenden Punkte durch einen COS-Halbbogen
  1017. miteinander verbunden. 
  1018.  
  1019. Nach dem Start der Eingabe stehen folgende Tasten zur Verfügung:
  1020. ----------------------------------------------------------------
  1021. Esc               Eingabe abbrechen
  1022. Del               Bildschirm löschen, Gitter/DIV zeichnen, und wieder Eingabe
  1023. Enter             eingebene Stützstellen & Linien akzeptieren, fortsetzen
  1024. rechte Maustaste  eingebene Stützstellen & Linien akzeptieren, fortsetzen 
  1025. linke  Maustaste  setzt Stützpunkte, Linie = Taste drücken und Maus bewegen
  1026. F9                Bildschirminhalt in BILD_???.BMP schreiben, (zum Drucken)
  1027. F10               wie F9, jedoch Farbe[2] gestrichelt darstellen
  1028. R                 zeigt den     Realteil maximiert in Farbe[3] am Bildschirm
  1029. I                 zeigt den Imaginärteil maximiert in Farbe[3] am Bildschirm
  1030. B                 zeigt den Real-und Imaginärteil maximiert in Farbe[3]
  1031.  
  1032. Nachdem nun die Stützstellen eingeben wurden, und mit 'Enter' bestätigt wurden,
  1033. werden die fehlenden Stützstellen mit dem Interpolations-Filter interpoliert.
  1034. Dann wird das Ergebnis der Interpolation gezeigt, und man kann mittels F9 / F10
  1035. das Ergebnis der Interpolation als Windows 3.0 BMP-Datei abspeichern.
  1036. (Die BILD_???.BMP Dateien werden von 001 bis 999 durchnummeriert.)
  1037.  
  1038. Nun stehen folgende Tasten zur Verfügung:
  1039. -----------------------------------------
  1040. Esc                 Eingabe  abbrechen
  1041. 1                   RC-Glättungsfilter Stärke 1
  1042. 2                   RC-Glättungsfilter Stärke 2
  1043. 3                   RC-Glättungsfilter Stärke 3
  1044. 4                   RC-Glättungsfilter Stärke 4
  1045. 5                   RC-Glättungsfilter Stärke 5
  1046. 6                   RC-Glättungsfilter Stärke 6 
  1047. 7                   Symetrischer-Glättungsfilter Stärke 1
  1048. 8                   Symetrischer-Glättungsfilter Stärke 2
  1049. 9                   Symetrischer-Glättungsfilter Stärke 3
  1050. 0                   Symetrischer-Glättungsfilter Stärke 4
  1051. andere Tasten       Gleichanteil = 0, fortsetzen...
  1052. linke  Maustaste    Gleichanteil = 0, fortsetzen...
  1053. rechte Maustaste    Eingabe des Nullpegels und dann fortsetzen...
  1054.  
  1055. Eingabe des Nullpegels (+ Drehung):
  1056. Der Nullpegel wird durch eine Linie zwischen zwei Punkten dargestellt,
  1057. haben beide Punkte eine unterschiedliche Höhe, erfolgt zusätzlich eine Drehung.
  1058. Die Eingabe des  ersten Punktes erfolgt durch drücken der rechten Maustaste,
  1059. die Eingabe des zweiten Punktes erfolgt durch drücken einer beliebigen Taste.
  1060.  
  1061.  
  1062. Die Filter sind 1.Ordnung,aber durch mehrmaliges filtern entstehen auch Filter
  1063. beliebiger Ordnung. Je größer die Stärke des Glättungsfilters, desto kleiner
  1064. ist die Grenzfrequenz des äquivalenten Tiefpasses.
  1065. Mit jedem Filtern erhöht sich auch die Spline-Ordnung des Signals...
  1066.  
  1067. RC-Filter:
  1068. ----------
  1069. Es wird eine Mittelung über eine durch die Stärke bestimmte Breite ausgeführt,
  1070. außerdem liegt eine Rückkoppelung vor, die dem Bildungsgesetz der Zahl e
  1071. nicht unähnlich ist, wenn Sprünge im Signal vorliegen...
  1072. Es dürfte infolge dessen nicht wundern, daß Rechteckimpulsen die exp()-Funktion
  1073. aufgeprägt wird, genauso wie bei einem RC-Tiefpass 1.Ordnung.
  1074. Infolge dessen gehe ich davon aus, daß dieses Filter sich auch so ähnlich wie
  1075. ein RC-Tiefpass 1.Ordnung verhält...
  1076.  
  1077. Symetrischer Filter:
  1078. --------------------
  1079. Es wird eine Vorwärts-Mittelung des Signals, mit einer durch die Stärke 
  1080. bestimmten Breite ausgeführt, ohne Rückkoppelung! 
  1081. Die Vorwärts-Mittelung hat den Nachteil einer Verschiebung in X-Richtung,
  1082. um zu verhindern, daß unser Signal bei mehreren Filterungen vom Bildschirm
  1083. wandert, wird abwechselnd nach links und nach rechts gemittelt.
  1084. Aufgrund der Ähnlichkeit von Integration und Mittelung über eine begrenzte
  1085. Breite, kann davon ausgegangen werden, daß dieser Filter ein entfernter
  1086. Verwandter des Integrators ist(der Frequenzverlauf entspricht der Si-Funktion).     
  1087. Rechteck und andere Signale, werden im Gegensatz zum RC-Filter symetrisch
  1088. verrundet, daher der Name 'Symetrischer Glättungsfilter'.
  1089.  
  1090.  
  1091. Nachdem wir nun gefiltert haben (oder auch nicht),
  1092. den Nullpegel festgelegt haben  (b.z.w. Gleichanteil = 0),
  1093. möchte das Programm gerne wissen wo, und wie es denn nun das Signal 
  1094. abzulegen hat, dies ist überigens die letzte Chance, um mit Esc abzubrechen!
  1095.  
  1096. Das Signal kann als reelle Daten im Speicher abgelegt werden, 
  1097. oder als Realteil / Imaginärteil komplexer Daten.
  1098.  
  1099. Wollen wir Polare Daten eingeben, 
  1100. speichern wir den Betrag als Realteil, und die Phase als Imaginärteil,
  1101. danach müssen wir noch von Polar nach Real & Imag. umrechnen...
  1102.  
  1103. #24  Eingabe mit Filtertyp Spezial
  1104.  
  1105. Eingabe des Signals mit Hilfe der Maus.
  1106. (Mit der Maus kann man Linien ziehen und Punkte setzen!)
  1107.  
  1108. Fehlende Punkte werden mit einem Spezial Interpolations-Filter errechnet,
  1109. dieser Filter beruht darauf, daß die mittlere Lückenbreite bestimmt wird,
  1110. die fehlenden Punkte linear verbunden werden, und dann wird zweimal gemittelt.
  1111. Die Mittelungsbreite ist proportional der mittleren Lückenbreite, dieser
  1112. Filter hat ein ähnliches Verhalten wie eine Spline-Interpolation, wenn genug
  1113. Stützstellen existieren, und die Lückenbreite nicht übermäßig schwankt!
  1114. Die Spline-Ordnung der interpolierten Stellen beträgt 1+2 (Linie+Mittelung).
  1115.  
  1116. Dieses Spezial-Filter ist absolut stabil, 
  1117. im Gegensatz zur Interpolationsformel von Lagrange,
  1118. die ursprünglich anstelle des Spezial-Filters stand, leider zeigte sich, daß
  1119. die Neigung zu wilden Überschwingen, mit steigender Stützstellenzahl immer
  1120. größer wurde. Wahrscheinlich versagt diese Interpolation gerade deshalb so
  1121. jämmerlich, weil von Hand eingegbene Werte nun mal nicht unbedingt einem
  1122. Polynom entsprechen, das würde erklären warum die Lagrangesche Interpolation
  1123. gerade bei steigender Stützstellenzahl immer unzuverlässiger wird, denn
  1124. bei steigender Stützstellenzahl, kristallisiert sich immer mehr heraus,
  1125. daß die eingegebene Funktion, eigentlich kein Polynom der durch die
  1126. Anzahl der Stützstellen gegebenen Ordnung ist.
  1127. Das häufig auftretende wilde Überschwingen, stellt zwar auch eine korrekte
  1128. Interpolation an den Stützstellen da, aber es wird ja letztendlich ein 
  1129. Polynom gesucht, das möglichst auch zwischen den Stützstellen brauchbar ist!
  1130.  
  1131. Nach dem Start der Eingabe stehen folgende Tasten zur Verfügung:
  1132. ----------------------------------------------------------------
  1133. Esc               Eingabe abbrechen
  1134. Del               Bildschirm löschen, Gitter/DIV zeichnen, und wieder Eingabe
  1135. Enter             eingebene Stützstellen & Linien akzeptieren, fortsetzen
  1136. rechte Maustaste  eingebene Stützstellen & Linien akzeptieren, fortsetzen 
  1137. linke  Maustaste  setzt Stützpunkte, Linie = Taste drücken und Maus bewegen
  1138. F9                Bildschirminhalt in BILD_???.BMP schreiben, (zum Drucken)
  1139. F10               wie F9, jedoch Farbe[2] gestrichelt darstellen
  1140. R                 zeigt den     Realteil maximiert in Farbe[3] am Bildschirm
  1141. I                 zeigt den Imaginärteil maximiert in Farbe[3] am Bildschirm
  1142. B                 zeigt den Real-und Imaginärteil maximiert in Farbe[3]
  1143.  
  1144. Nachdem nun die Stützstellen eingeben wurden, und mit 'Enter' bestätigt wurden,
  1145. werden die fehlenden Stützstellen mit dem Interpolations-Filter interpoliert.
  1146. Dann wird das Ergebnis der Interpolation gezeigt, und man kann mittels F9 / F10
  1147. das Ergebnis der Interpolation als Windows 3.0 BMP-Datei abspeichern.
  1148. (Die BILD_???.BMP Dateien werden von 001 bis 999 durchnummeriert.)
  1149.  
  1150. Nun stehen folgende Tasten zur Verfügung:
  1151. -----------------------------------------
  1152. Esc                 Eingabe  abbrechen
  1153. 1                   RC-Glättungsfilter Stärke 1
  1154. 2                   RC-Glättungsfilter Stärke 2
  1155. 3                   RC-Glättungsfilter Stärke 3
  1156. 4                   RC-Glättungsfilter Stärke 4
  1157. 5                   RC-Glättungsfilter Stärke 5
  1158. 6                   RC-Glättungsfilter Stärke 6 
  1159. 7                   Symetrischer-Glättungsfilter Stärke 1
  1160. 8                   Symetrischer-Glättungsfilter Stärke 2
  1161. 9                   Symetrischer-Glättungsfilter Stärke 3
  1162. 0                   Symetrischer-Glättungsfilter Stärke 4
  1163. andere Tasten       Gleichanteil = 0, fortsetzen...
  1164. linke  Maustaste    Gleichanteil = 0, fortsetzen...
  1165. rechte Maustaste    Eingabe des Nullpegels und dann fortsetzen...
  1166.  
  1167. Eingabe des Nullpegels (+ Drehung):
  1168. Der Nullpegel wird durch eine Linie zwischen zwei Punkten dargestellt,
  1169. haben beide Punkte eine unterschiedliche Höhe, erfolgt zusätzlich eine Drehung.
  1170. die Eingabe des  ersten Punktes erfolgt durch drücken der rechten Maustaste,
  1171. die Eingabe des zweiten Punktes erfolgt durch drücken einer beliebigen Taste.
  1172.  
  1173.  
  1174. Die Filter sind 1.Ordnung,aber durch mehrmaliges filtern entstehen auch Filter
  1175. beliebiger Ordnung. Je größer die Stärke des Glättungsfilters, desto kleiner
  1176. ist die Grenzfrequenz des äquivalenten Tiefpasses.
  1177. Mit jedem Filtern erhöht sich auch die Spline-Ordnung des Signals...
  1178.  
  1179. RC-Filter:
  1180. ----------
  1181. Es wird eine Mittelung über eine durch die Stärke bestimmte Breite ausgeführt,
  1182. außerdem liegt eine Rückkoppelung vor, die dem Bildungsgesetz der Zahl e
  1183. nicht unähnlich ist, wenn Sprünge im Signal vorliegen...
  1184. Es dürfte infolge dessen nicht wundern, daß Rechteckimpulsen die exp()-Funktion
  1185. aufgeprägt wird, genauso wie bei einem RC-Tiefpass 1.Ordnung.
  1186. Infolge dessen gehe ich davon aus, daß dieses Filter sich auch so ähnlich wie
  1187. ein RC-Tiefpass 1.Ordnung verhält...
  1188.  
  1189. Symetrischer Filter:
  1190. --------------------
  1191. Es wird eine Vorwärts-Mittelung des Signals, mit einer durch die Stärke 
  1192. bestimmten Breite ausgeführt, ohne Rückkoppelung! 
  1193. Die Vorwärts-Mittelung hat den Nachteil einer Verschiebung in X-Richtung,
  1194. um zu verhindern, daß unser Signal bei mehreren Filterungen vom Bildschirm
  1195. wandert, wird abwechselnd nach links und nach rechts gemittelt.
  1196. Aufgrund der Ähnlichkeit von Integration und Mittelung über eine begrenzte
  1197. Breite, kann davon ausgegangen werden, daß dieser Filter ein entfernter
  1198. Verwandter des Integrators ist(der Frequenzverlauf entspricht der Si-Funktion).     
  1199. Rechteck und andere Signale, werden im Gegensatz zum RC-Filter symetrisch
  1200. verrundet, daher der Name 'Symetrischer Glättungsfilter'.
  1201.  
  1202.  
  1203. Nachdem wir nun gefiltert haben (oder auch nicht),
  1204. den Nullpegel festgelegt haben  (b.z.w. Gleichanteil = 0),
  1205. möchte das Programm gerne wissen wo, und wie es denn nun das Signal 
  1206. abzulegen hat, dies ist überigens die letzte Chance, um mit Esc abzubrechen!
  1207.  
  1208. Das Signal kann als reelle Daten im Speicher abgelegt werden, 
  1209. oder als Realteil / Imaginärteil komplexer Daten.
  1210.  
  1211. Wollen wir Polare Daten eingeben,
  1212. speichern wir den Betrag als Realteil, und die Phase als Imaginärteil,
  1213. danach müssen wir noch von Polar nach Real & Imag. umrechnen...
  1214.  
  1215. #31  Status-Information anzeigen
  1216. Zeigt alle Status-Informationen zu den Daten im Speicher!
  1217. #32  Zeitb. <==vertauschen==> Freq.
  1218.  
  1219. Vertauscht FFTflag, die Daten werden nicht verändert, aber der Status
  1220. Daten im Zeitbereich / Frequenzbereich wird vertauscht!
  1221. Das ist dann sinnvoll, wenn Sie Daten importieren oder von Hand eingeben,
  1222. (FFT4WAVE geht nämlich dann davon aus,daß die Daten im Zeitbereich vorliegen)
  1223. Sie aber möchten, daß die Daten im Frequenzbereich vorliegen!
  1224.  
  1225. #33  ändere Abtastrate / Samplerate
  1226.  
  1227. Ändert die Samplerate (Abtastwerte pro Sekunde).
  1228. Nyquistkriterium (Shannons Abtasttheorem):  Grenzfrequenz = Samplerate / 2
  1229. Funktionen wie FFT reeller Daten, Ausschneiden in der Visualisierung,
  1230. und Oversampling linear/Filter korrigieren die Abtastrate! 
  1231.  
  1232. #36  ändere die Gesamtdauer
  1233.  
  1234. Ändert die Gesamtdauer der Daten!
  1235. Beeinflußt die Samplerate = Datenlänge(Anzahl_Abtastwerte) / Gesamtdauer
  1236. Funktionen wie FFT reeller Daten, Ausschneiden in der Visualisierung,
  1237. und Oversampling linear/Filter korrigieren die Abtastrate! 
  1238.  
  1239. #34  ändere Gitter_X / DIV Dauer
  1240.  
  1241. Ändert die Dauer eines Gitters (DIV)!
  1242. Das DIV ist ein Gitter in der Dateneingabe mit Filtertyp.{Eingabe mittels Maus}
  1243. Beeinflußt die Samplerate = Datenlänge(Anzahl_Abtastwerte) / (16*DIV_Dauer).
  1244. Funktionen wie FFT reeller Daten, Ausschneiden in der Visualisierung,
  1245. und Oversampling linear/Filter korrigieren die Abtastrate! 
  1246.  
  1247. #35  ändere Gitter_Y / DIV Amplitude
  1248.  
  1249. Ändert die Höhe eines Gitters (DIV) der Dateneingabe mit Filtertyp.  {Maus}
  1250. Ändern sie bitte die Höhe, bevor sie die Daten eingeben, denn diese Änderung
  1251. beeinflußt nur nachfolgende Dateneingaben mit Filtertyp...
  1252.  
  1253. #52  Y-Scalierung und Information
  1254.  
  1255. Diese Funktion zeigt die Häufigkeit von Amplitudenwerten an, hiermit kann
  1256. man sehr schnell erkennen, ob und wie stark die Daten übersteuert wurden,
  1257. und welcher Art die Daten ungefähr sind.
  1258. Außerdem wird der Größte, von Null entfernte Datenwert 'Y- Maximum' bestimmt.
  1259. Dieser größte Datenwert, wird auch zur Skalierung der Darstellung verwendet!
  1260. Die Differenz zwischen den größten ±Werten (Peak to Peak),
  1261. wird ebenfalls ermittelt, und als Zahl angezeigt.
  1262. Natürlich wird auch der Gleichanteil bestimmt und als DC/Offset angezeigt.
  1263. Fast alle Soundkarten lassen den Gleichanteil des Eingangssigals nicht durch!
  1264. (Dieser wird mit Hilfe eines Hochpasses (Kondensator) blockiert.)
  1265. Trotzdem haben leider fast alle Soundkarten einen Offsetfehler, und da der
  1266. Gleichanteil blockiert wird, ist der DC/Offset der Offsetfehler der Soundkarte.
  1267.  
  1268. DC_Offset = Effektivwert des  Gleichanteils
  1269. Y_eff    = Effektivwert des Wechselanteils
  1270.                           _________________________
  1271.  gesamte Effektivwert =  √  DC_Offset²  +  Y_eff²
  1272.  
  1273. Mit den Tasten F9 und F10 können wir jetzt den Grafikbildschirm ausdrucken.
  1274.  
  1275. Ein Tastendruck bringt weitere Möglichkeiten zum Vorschein:
  1276. -----------------------------------------------------------
  1277. Die Taste 'Esc' oder das Auswahlfeld 'STOP!' bricht die Funktion ab!
  1278. Die weiteren möglichen Auswahlfelder 'New Amplitude ?' ; 'Real & Imag.' ;
  1279. 'only Real' und 'only Imag.' erlauben es, die Werte aller Daten neu zu
  1280. skalieren, der Bezugspunkt ist dabei 'Y - Maximum'.
  1281.  
  1282. 'New Amplitude ?'    skaliert reelle Daten. 
  1283. 'Real & Imag.'       skaliert komplexe Daten auf einen Bezugspunkt. 
  1284. 'only Real.'         skaliert nur den     Realteil komplexer Daten.
  1285. 'only Imag.'         skaliert nur den Imaginärteil komplexer Daten.
  1286.  
  1287. Es spielt eine wichtige Rolle, ob man mit der linken Maustaste, oder mit der
  1288. rechten Maustaste auf das Auswahlfeld klickt, wenn man nämlich mit der
  1289. rechten Maustaste auf das Auswahlfeld klickt, dann wird nicht nur skaliert,
  1290. sondern es wird auch der Gleichanteil weggerechnet!
  1291.  
  1292. #53  X-Scalierung (Oversampling)
  1293.            Die X-Skalierung besteht aus 3 Funktionen:
  1294.           ════════════════════════════════════════════
  1295.  
  1296. 'Impossibility Drive'    'Oversampling Linear'    'Oversampling Filter'
  1297.  
  1298. Impossibility Drive:
  1299. ---------------------
  1300. Es wird die Eingabe einer neuen Datenlänge, oder eines Multiplikationsfaktors
  1301. erwartet, ist der Wert unlogisch wird die Funktion abgebrochen.
  1302. Es werden alle Datenformate unterstützt!
  1303.  
  1304. Wenn eine kleine Zahl eingegeben wurde, dann handelt es sich um einen
  1305. Multiplikationsfaktor 'Multiply' und die Daten werden dupliziert (wiederholt).
  1306. Die Gesamtdauer erhöht sich dabei logischerweise um den Multiplikationsfaktor.
  1307.  
  1308. Wenn eine neue Datenlänge eingegeben wurde, werden die Daten mit dem letzten
  1309. gültigen Datenwert, bis zur Datenlänge aufgefüllt (nicht überschrieben!).
  1310. Es wird nicht mit Null aufgefüllt, um Sprünge zu vermeiden, dafür entsteht
  1311. jedoch möglicherweise ein unerwünschter Gleichanteil...
  1312.  
  1313.  
  1314.  
  1315. Oversampling Linear:
  1316. ---------------------
  1317. Es werden alle Datenformate unterstützt!
  1318. Es wird die Eingabe einer neuen Datenlänge erwartet, danach werden die
  1319. Daten auf die neue Datenlänge 'gedehnt' , b.z.w. interpoliert.
  1320. Die physikalische in Visualisierung dargestellte Skalierung,
  1321. verändert sich dabei nicht. Nur die Anzahl der Daten, durch die
  1322. diese physikalische Skalierung repräsentiert wird, ändert sich...
  1323. Man könnte der Datenlänge also die Bedeutung 'Präzision' zuschreiben.
  1324. Wenn man die neue Datenlänge größer als die alte Datenlänge macht,
  1325. dann entspricht diese Funktion dem Oversampling!
  1326. Das heißt, die Gefahr des Auftretens von Alising/Bandüberlappung sinkt.
  1327. Die Interpolation erfolgt linear, ähnlich der B-Spline Interpolation 2.Ordnung.
  1328.  
  1329.  
  1330.  
  1331. Oversampling Filter:
  1332. ---------------------
  1333. Es werden nur reelle Daten unterstützt!
  1334. Es wird die Eingabe einer neuen Datenlänge erwartet, danach werden die
  1335. Daten auf die neue Datenlänge 'gedehnt' , b.z.w. interpoliert.
  1336. Die physikalische in Visualisierung dargestellte Skalierung,
  1337. verändert sich dabei nicht. Nur die Anzahl der Daten, durch die
  1338. diese physikalische Skalierung repräsentiert wird, ändert sich...
  1339. Man könnte der Datenlänge also die Bedeutung 'Präzision' zuschreiben.
  1340. Wenn man die neue Datenlänge größer als die alte Datenlänge macht,
  1341. dann entspricht diese Funktion dem Oversampling!
  1342. Das heißt, die Gefahr des Auftretens von Alising / Bandüberlappung sinkt.
  1343. Die Interpolation erfolgt mit Hilfe eines Filters, mögliche Filter haben
  1344. die Endung   *_.FFT      .Unsere Daten werden mit dem Filter gefaltet, und
  1345. zwar mit der Wilden Diskreten Faltung (WDF). Diese Faltung erlaubt es, reelle
  1346. diskrete Daten unterschiedlicher Datenlänge, und unterschiedlicher Skalierung
  1347. miteinander zu falten, und das auch noch auf eine neue Datenlänge!
  1348. Außerdem tritt kein Amplitudenfehler auf, und die Geschwindigkeit mit der
  1349. die Wilde Diskrete Faltung ausgeführt wird, ist sehr hoch!
  1350.  
  1351. Das ganze beruht auf der verallgemeinerten Abtastreihe (VAR), und
  1352. der Filter repäsentiert einen 'Kern für verallgemeinerte Abtastreihen' (KVAR)
  1353.  
  1354.                         Filter(t)  =  KVAR(πt)
  1355.  
  1356. Da es sich bei dem Filter (KVAR) um eine gerade Funktion handelt, wird nur
  1357. die zweite (positive) Hälfte des Filters gelesen, und um den Faktor 2 linear
  1358. interpoliert. Jetzt wird der Filter so angesprochen: y = Filter( abs(t) )
  1359. Dieses Filter hat eine virtuelle Datenlänge von 32768.
  1360.  
  1361. #56  Nullpunktvertauschung_X
  1362.  
  1363. Vertauscht die erste Hälfte der Daten, mit der zweiten Hälfte der Daten.
  1364. Zweimalige Ausführung erzeugt also wieder den Originalzustand (wie bei der FFT).
  1365.  
  1366. Die Frage ist, was bedeutet das für uns ?
  1367. ------------------------------------------
  1368. Der FFT Algorithmus zwingt, wie wir wissen, unseren Daten Periodiztät mit der
  1369. Datenlänge auf, und zwar sowohl im Frequenzbereich, als auch im Zeitbereich.
  1370. Daraus folgt, daß wir den linken Rand ( = 0 ) und auch den rechten Rand
  1371. ( = Samplerate, Gesamtdauer) der Daten, als Nullpunkt in X-Richtung betrachten
  1372. können, aufgrund der Periodizität (unendliche Wiederholung der Daten).
  1373.  
  1374. Die Wirkung der Vertauschung ist so, als währe der Nullpunkt in die Mitte
  1375. der Daten verschoben worden, und wir erhalten eine Darstellung der FFT-Daten,
  1376. wie wir es gewohnt sind. Umgekehrt können wir unsere gewohnte Darstellung der
  1377. Daten, damit natürlich auch in die Darstellung der FFT überführen...
  1378.  
  1379. Es sind alle Datenformate zulässig, allerdings ergibt es keinen Sinn, diese
  1380. Funktion auf die durch 'FFT reeller Daten' erzeugten komplexen Daten
  1381. anzuwenden, denn diesen fehlt ja eine symetrische (negative) Hälfte, man würde
  1382. also das erste 1/4 mit dem zweiten 1/4 vertauschen, was jedoch sinnlos ist!
  1383.  
  1384. Wenn die Datenlänge ungerade ist, dann hat nicht nur der FFT-Algorithmus
  1385. Probleme, auch diese Funktion spinnt dann ein wenig.
  1386.  
  1387. (Ein einzelnener Datenwert bleibt wo er ist, wird also nicht vertauscht!)
  1388.  
  1389. #30  umwandeln:  Polar => Real,Imag.
  1390.  
  1391. Umwandeln von polaren komplexen Daten, in real&imaginäre komplexe Daten.
  1392. ------------------------------------------------------------------------
  1393. Dazu legt man den Betrag der polaren komplexen Daten als Realteil ab,
  1394. und die Phase der polaren komplexen Daten als Imaginärteil ab.
  1395. Die Phase muß ein Winkel von 0...360°, b.z.w  von -180°...180° sein.
  1396.  
  1397. Der Aufruf dieser Funktion, wandelt dann die im Realteil und Imaginärteil
  1398. abgelegten polaren komplexen Daten, in den tatsächlichen Realteil und 
  1399. Imaginärteil komplexer Daten um...
  1400.  
  1401. #55  Absoluter Fehler: MEMORY - Datei.FFT
  1402.  
  1403. Bildet die Differenz zwischen den im Speicher abgelegten Daten und den
  1404. in der ausgewählten *.FFT Datei abgelegten Daten.
  1405.  
  1406. Dazu ist es erforderlich, daß die Datenlänge und der Datentyp (Reell/Komplex)
  1407. übereinstimmt, andernfalls läßt sich die Differenz nicht berechnen.
  1408. Wenn die Samplerates, oder der Zustand (Zeitbereich/Frequenzbereich)
  1409. unterschiedlich sind, wird darauf hingewiesen, die Differenz kann jedoch
  1410. gebildet werden (das Ganze ergibt dann nur möglicherweise keinen Sinn).
  1411.  
  1412. Wenn man die Daten in der *.FFT Datei, als die korrekten Werte im Sinne der
  1413. Fehlerrechnung betrachtet, dann ist die Differenz der Absolute Fehler!
  1414.  
  1415. #60  complexe Faltung: MEMORY * Datei.FFT
  1416.  
  1417. Faltet die im Speicher abgelegten komplexen Daten,
  1418. mit den in der ausgewählten *.FFT Datei abgelegten komplexen Daten.
  1419.  
  1420. Dazu ist es erforderlich, daß die Datenlänge übereinstimmt,
  1421. andernfalls läßt sich die Faltung nicht realisieren.
  1422. Wenn die Samplerates oder der Zustand (Zeitbereich/Frequenzbereich)
  1423. unterschiedlich sind, wird darauf hingewiesen, die Faltung ist jedoch möglich.
  1424. (Das Ganze ergibt dann nur möglicherweise keinen Sinn...)
  1425.  
  1426. Da diese Faltung auf der FFT beruht, sind die Daten als periodisch zu
  1427. betrachten, infolge der dadurch nötigen Amplitudenkorrekturfaktoren,
  1428. ergibt sich ein großes Problem: Denn Diracstöße (mit Amplitude statt Gewicht),
  1429. periodische Signale, und nichtperiodische Impulse, benötigen leider
  1430. alle unterschiedliche Amplitudenkorrekturfaktoren, daraus ergeben sich
  1431. neun mögliche unterschiedliche Amplitudenkorrekturfaktoren !!!
  1432.  
  1433. Außerdem gibt es keine einfach Möglichkeit für den Algorithmus, zu erkennen
  1434. um welchen Fall es sich überhaupt handelt. Es ist also so gut wie unmöglich
  1435. zu realisieren, daß die Amplitude stimmt, leider.
  1436.  
  1437. Die Form der gefalteten Daten stimmt jedoch, solange kein Randeffekt auftritt!
  1438.  
  1439. Wenn beide Samplerates identisch sind, dann stimmt die X-Skalierung.
  1440.  
  1441.  
  1442. Diese Faltung dient weniger der Mathematik, sondern ist vielmehr als
  1443. Universal-Filter gedacht, um beliebige lineare Übertragungssysteme zu
  1444. realisieren. Das funktioniert so:
  1445.  
  1446. g(t) = s(t) * h(t)
  1447.  
  1448. s(t) ist unser komplexes Eingangssignal im Zeitbereich.
  1449. g(t) ist unser komplexes Ausgangssignal im Zeitbereich.
  1450. h(t) ist die inverse Fouriertransformierte des Filterfrequenzgangs,
  1451.             b.z.w. die Stoßantwort des Filters auf einen Diracstoß.
  1452.  
  1453. Selbstverständlich kann man mit Hilfe von FFT4WAVE solche Filter erzeugen,
  1454. Ähnlichkeiten mit der Funktion 'Oversampling Filter' sind rein unzufällig,
  1455. dort wird jedoch ein exakterer Faltungsalgorithmus verwendet,
  1456. und es werden reelle Daten gefaltet...
  1457.  
  1458. #54  Hanning Fenster
  1459.  
  1460. Alle Daten, egal ob Reell oder Komplex, Zeitbereich oder Frequenzbereich,
  1461. werden mit einem Hanning Fenster multipliziert (0.5-0.5*cos(2πt/T)).
  1462.  
  1463. Selbiges bewirkt, daß die Daten am Datenanfang und am Datenende gegen 0 gehen.
  1464. Der Sprung zwischen Datenanfang und Datenende, der durch die von der FFT
  1465. aufgezwungende Periodizität entsteht, wenn die Datenlänge kein ganzzahliges
  1466. Vielfaches der Periode der Daten ist, verschwindet dadurch.
  1467.  
  1468. Und da das Hanning Fenster als Periode die ganze Datenlänge hat,
  1469. wird im Frequenzbereich nur ein einzelner Datenwert, in der Nähe von Null durch
  1470. das Hanning Fenster verfälscht. Allerdings fällt das ganze Spektrum
  1471. etwas niedriger aus, und es gibt leider keinen konstanten Korrekturfaktor!
  1472. Also stimmt die Form des Spektrums bis auf einen einzelnen Datenwert.
  1473.  
  1474. Der Leckeffekt wird hiermit reduziert, allerdings werden die Spektrallinien
  1475. auch etwas breiter, aber damit kann man leben...
  1476.  
  1477. #51  Visualisierung
  1478.  
  1479. Diese Funktion dient zur grafischen Anzeige (und zum Ausdruck) von Abtastwerten.
  1480. Außerdem kann die Datenmenge auf das Zoom-Fenster reduziert werden, mit anderen
  1481. Worten, es ist möglich das Zoom-Fenster aus den gesamten Daten auszuschneiden.
  1482. Danach besteht die Gesamtheit der Daten nur noch aus dem Inhalt des
  1483. Zoom-Fensters, der Rest der Daten ist unwiederbringlich weg!
  1484.  
  1485. In der linken oberen Ecke, sehen wir die Zahlenwerte der Daten, über denen der
  1486. Fadenkreuz-Cursor gerade steht, damit kann man die Daten sehr gut vermessen.
  1487. Insbesondere deshalb, weil die Möglichkeit besteht, den Nullpunkt beliebig mit
  1488. den Tasten 'S'  'X' und 'Y' auf die Cursorposition zu setzen.
  1489. Wenn ein neuer Nullpunkt gesetzt wird, dann steht vor den Zahlen ein Delta,
  1490. um auszudrücken, daß eine Differenz (Entfernung, Abstand) bestimmt wird!
  1491.  
  1492.  
  1493. Es stehen folgende Tasten zur Verfügung:
  1494. -------------------------------------------------------------------------------
  1495. F1               Zeigt Tastenbelegung an  (Quick Help)
  1496. F9               Ausdruck in BILD_???.BMP Datei, (Windows 3.0 s/w Grafikformat)
  1497. F10              Ausdruck in BILD_???.BMP Datei, Farbe[2] wird gestrichelt
  1498. <--              Ausschneiden des aktuellen (Zoom)-Fensters und dann abbrechen
  1499. Esc              Anzeige der Daten abbrechen.
  1500. S                Setzen eines neuen Nullpunktes für X und Y
  1501. X                Setzen eines neuen Nullpunktes für X
  1502. Y                Setzen eines neuen Nullpunktes für Y
  1503. N                Wiederherstellen des Original-Nullpunkts
  1504. Z                Wiederherstellen des Original-Nullpunkts
  1505. +                Amplitude 'Zoom in'    (Fenster in Y-Richtung vergrößern )
  1506. -                Amplitude 'Zoom out'   (Fenster in Y-Richtung verkleinern)
  1507. linke  Maustaste 'Zoom in' setzt linke obere Ecke des neuen Fensters, noch ein
  1508.                  Druck der linken Maustaste setzt dann die untere rechte Ecke.
  1509.                  Jede andere Taste bricht den 'Zoom in' ab.
  1510. rechte Maustaste 'Zoom out', Fenster um Faktor 4 vergrößern.
  1511.  
  1512.  
  1513. Die folgenden Tasten stehen nur bei komplexen Daten zur Verfügung:
  1514. -------------------------------------------------------------------
  1515. A                Amplitude (Betrag)
  1516. L                20 * log10(Betrag)
  1517. P                Polare Darstellung, Betrag und Phase.
  1518. R                Nur     Realteil zeigen
  1519. I                Nur Imaginärteil zeigen
  1520. B                Realteil und Imaginärteil auf zweigeteiltem Bildschirm zeigen
  1521.  
  1522. #50  FFT / inverse FFT
  1523. Fast Fourier Transformation:
  1524. ----------------------------
  1525. Diese Funktion führt die FFT, oder die inverse FFT der Daten durch, 
  1526. je nachdem ob der Status der Daten Zeit oder Frequenz ist.
  1527.  
  1528. Die Daten im Zeitbereich stellen ein sich kontinuierlich wiederholendes Signal
  1529. dar.  Das ist gar nicht so leicht nachzuweisen, denn das Auflösungsgesetz der
  1530. FFT lautet etwa so:    PeriodenbreiteFrequenz = Datenlänge / PeriodenbreiteZeit
  1531. Ein Signal mit der Periodenbreite Datenlänge hätte also einen Spektrallinien-
  1532. abstand von 1, was gleichbedeutend damit ist, daß wir keinen Unterschied
  1533. zwischen wiederholend & nicht_wiederholend wahrnehmen können, weil dieser in
  1534. der begrenzten Auflösung der FFT untergeht.
  1535.  
  1536. Einen sehr wichtigen Unterschied gibt es jedoch, wenn die FFT eines
  1537. nichtkontinuierlichen Impulses erfolgt: Die kontinuierliche Darstellung eines
  1538. nichtkontinuierlichen Impulses, entspricht der Faltung desselben Impulses, mit
  1539. einer Diracstoßfolge des Gewichts (1) und des Abstands 'Gesamtdauer',
  1540. die FFT einer Diracstoßfolge enthält aber den Amplitudenfaktor 1/Gesamtdauer,
  1541. und genau dieser Faktor verfälscht die Höhe der Amplitude.
  1542. Das Problem tritt nicht bei kontinuierlichen Signalen auf!
  1543. Wenn wir also die tatsächliche Amplitude nichtkontinuierlicher Impulse
  1544. bestimmen wollen, multiplizieren wir die Amplitude mit der Gesamtdauer!!!
  1545.  
  1546. Folgendes Bild illustriert, wie man die Wiederholung beweisen kann:
  1547.  
  1548. nicht wiederholend                           wiederholend
  1549.  ╔═════════════╗                           ╔═════════════╗
  1550.  ║─┐         ┌─║           ┌───┐         ┌─║─┐         ┌─║─┐         ┌───┐
  1551.  ║ │         │ ║     ....  │   │         │ ║ │         │ ║ │         │   │ ....
  1552.  ║ └─────────┘ ║         ──┘   └─────────┘ ║ └─────────┘ ║ └─────────┘   └─
  1553.  ╚═════════════╝                           ╚═════════════╝
  1554.  2 kurze Impulse                            lange Impulse
  1555.  
  1556. Es stehen grundsätzlich zwei FFT/inverseFFT Algorithmen zur Verfügung: Die 
  1557. FFT/inverseFFT von komplexen Daten, und die FFT/inverseFFT von reellen Daten.
  1558. Die FFT von komplexen Daten hat den Vorteil,daß auch die inverse FFT garantiert
  1559. immer klappt; die FFT von reellen Daten nutzt dafür den Speicher effizienter.
  1560. Obwohl beide FFTs im Frequenzbereich komplexe Daten liefern, gibt es einen
  1561. wichtigen Unterschied: Die FFT reeller Daten liefert nur 0...Samplerate/2,
  1562. während die FFT komplexer Daten 0...Samplerate liefert. Diese zusätzlichen
  1563. Daten sind jedoch in der Regel lediglich eine Spiegelung um Samplerate/2;
  1564. da die Daten im Frequenzbereich mit Samplerate periodisch sind, entspricht
  1565. Samplerate gleich 0, und der Sprung von + nach - findet bei Samplerate/2 statt.
  1566. Man kann eine FFT reeller Daten auch dadurch realisieren, daß man die reellen
  1567. Daten in komplexe Daten umwandelt, indem man den Imaginärteil mit 0 füllt
  1568. (und die reellen Daten als Realteil komplexer Daten ablegt).
  1569.  
  1570. Leider verarbeitet die FFT nicht Daten beliebiger Länge, 
  1571. sondern stürzt ab, wenn die Daten in einer unsinnvollen Datenlänge vorliegen.
  1572. Vielfache von 4 funktionieren besonders schnell, aber auch Faktoren 
  1573. wie 2, 3, 5, 7, 11, 13, ... dürfen in der Datenlänge enthalten sein.
  1574.  
  1575. Tip:  Es ist sehr oft sinnvoll, mittels Oversampling die Datenlänge zu ändern!
  1576.  
  1577.  
  1578. Lars Otte, 
  1579.            Autor von FFT4WAVE
  1580.  
  1581.  
  1582. ------------------------------------------------------------------------------
  1583. THIS PROGRAM CALCULATES THE FAST FOURIER TRANSFORM OF VERY LONG SERIES,
  1584. AS LONG AS YOUR FAR HEAP ALLOWS. FOR EXAMPLE, USING DOUBLE PRECISION IT
  1585. IS POSSIBLE TO PROCESS 70.000 REAL DATA POINTS. IT IMPLEMENTS R. C.
  1586. SINGLETON'S MIXED RADIX FAST FOURIER ALGORITHM. SOME FEATURES OF THIS
  1587. ALGORITHM ARE: 1) THE LENGTH OF THE SERIES DOES NOT HAVE TO BE BE
  1588. NECESSARILY A POWER OF TWO, THE LENGTH MAY INCLUDE FACTORS OF 2 AND 4,
  1589. AND ALSO ODD FACTORS AS 3,5,7, ETC,2-) TO AVOID TRUNCATION ERRORS, THE
  1590. SINES AND COSINES ARE GENERATED RECURSIVELY, 3-) THE DATA AND ITS
  1591. TRANSFORM ARE ACCESSED WITH HUGE POINTERS.
  1592.  
  1593.  
  1594. DATA SIZE RESTRICTION:
  1595.  
  1596. The series has to fit in conventional memory (ie. far heap). Using
  1597. double precision it means somewhere around 70.000 real data points
  1598. (547 K bytes), depending on your system configuration.
  1599.  
  1600.   
  1601. TRUNCATION ERRORS ARE A BIG PROBLEM:
  1602.  
  1603. First I used two FFT subroutines found in SYMTEL and modified them
  1604. using huge pointers to access the data. Everything worked fine until
  1605. I started transforming series 12K long and above. It took me a while
  1606. to figure out the problem was in the truncation errors when calculating
  1607. the sines and cosines using the library functions.
  1608.  
  1609. METHOD:
  1610.  
  1611. I translated to C, R. C. Singleton's mixed radix fast Fourier transform
  1612. algorithm (see reference in SING.C). His algorithm generates the 
  1613. sines and cosines recursively and corrects for truncation errors.
  1614.  
  1615. DATA LENGTH
  1616.  
  1617. Does not have to be a power of 2 necessarily. The length can contain
  1618. even factors as 2 and 4, and also odd factors as 3,5, 7, 11, etc.
  1619. The algorithm is most efficient if the length is a power of four.
  1620. Data lengths with odd factors of 3 and 5 can be used without a great
  1621. loss in performance.
  1622.  
  1623.  
  1624.     This functions are translations from the fortran program in
  1625.     R. C. Singleton, An algorithm for computing the mixed radix fast
  1626.     Fourier transform 
  1627.   
  1628.     IEEE Trans. Audio Electroacoust., vol. AU-17, pp. 93-10, June 1969.
  1629.  
  1630. **************************************************************
  1631. *  Javier Soley, Ph. D,   FJSOLEY @UCRVM2.BITNET             *
  1632. *  Escuela de Física y Centro de Investigaciones Geofísicas  *
  1633. *  Universidad de Costa Rica                                 *
  1634. **************************************************************